我的/etc/apt/sources.list
包含这一行:
deb http://downloads.sourceforge.net/project/xenlism-wildfire/repo deb/
我想通过sed
命令行删除该行,因此我尝试了此代码但返回错误!
$ sudo sed 's:deb http://downloads.sourceforge.net/project/xenlism-wildfire/repo deb/::g' /etc/apt/sources.list
sed: -e expression #1, char 75: unknown option to `s'
:
我猜测是后面的符号http
导致了这个错误,但是我该如何修复它呢?
答案1
您可以使用任何*符号来分隔搜索/替换字符串,只要不与符号冲突在字符串,只要您始终如一地使用它,例如:
sudo sed 's#deb http://downloads.sourceforge.net/project/xenlism-wildfire/repo deb/##g' /etc/apt/sources.list
这减少了对有问题的字符进行转义的需要(可以使用\
转义符来完成)。
*我确信存在例外,特别是如果使用旧版本sed
,但我不知道有任何限制。
答案2
像这样运行:
sudo sed -i '\%^deb http://downloads.sourceforge.net/project/xenlism-wildfire/repo deb%d' /etc/apt/sources.list
我修复的问题:
- 使用
-i
标志来就地修改文件。如果没有该标志,命令只会将输出打印sed
到屏幕上,而不会更新文件。 - 我没有使用 来
s///
用空字符串替换该行,而是使用命令d
来删除该行。 - 对于模式匹配,
/.../
我使用了而不是\%...%
,因为%
不会出现在模式中。使用/
,所有出现的/
都必须被替换。
请注意,更简单的过滤器可能就足够了。例如,如果您知道xenlist-wildfire
在文件中是唯一的,那么这个更简单的命令也可以工作:
sudo sed -i '/xenlism-wildfire/d' /etc/apt/sources.list
由于此示例中没有/
,我可以使用更简单的/.../
过滤器。
(感谢@steeldriver以了解改进想法。