Ali*_*deh 6 command-line repository sed text-processing
我的/etc/apt/sources.list包含这一行:
deb http://downloads.sourceforge.net/project/xenlism-wildfire/repo deb/
Run Code Online (Sandbox Code Playgroud)
我想通过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'
Run Code Online (Sandbox Code Playgroud)
我猜是这个错误:之后的符号http,但我该如何解决呢?
你可以使用任何*符号分隔查找/替换字符串不与符号冲突中的字符串,只要你使用它始终如一,例如:
sudo sed 's#deb http://downloads.sourceforge.net/project/xenlism-wildfire/repo deb/##g' /etc/apt/sources.list
Run Code Online (Sandbox Code Playgroud)
这减少了对有问题的字符进行转义的需要(这可以\用作转义符)。
*我确信有例外,特别是如果使用旧版本的sed,但我不知道手头有任何限制。
像这样运行:
sudo sed -i '\%^deb http://downloads.sourceforge.net/project/xenlism-wildfire/repo deb%d' /etc/apt/sources.list
Run Code Online (Sandbox Code Playgroud)
我修复的问题:
-i标志就地修改文件。没有它,该命令只会将输出打印sed到屏幕上,而不更新文件。s///替换与空字符串行了,我用d命令删除就行了。/.../我使用了\%...%,而%不是,因为没有出现在模式中。使用/,/必须替换所有出现的。请注意,可能更简单的过滤器可能就足够了。例如,如果您知道它xenlist-wildfire在文件中是唯一的,那么这个更简单的命令也将起作用:
sudo sed -i '/xenlism-wildfire/d' /etc/apt/sources.list
Run Code Online (Sandbox Code Playgroud)
因为在这个例子中没有/,我可以使用更简单的/.../过滤器。
(感谢@steeldriver的改进想法。)
| 归档时间: |
|
| 查看次数: |
1126 次 |
| 最近记录: |