问题:
我正在编写一个脚本来配置 Debian 安装.....我需要注释掉 DVD 的sources.list 中的行,我正在尝试使用 sed,我知道如何删除该行或多行,但我想要将其注释掉。
我所拥有的是这样的:
sed -i '/deb cdrom:[Debian GNU/Linux 9.4.0 _S/s/^/#/' /etc/apt/sources.list
但它给出了这个错误:
sed: -e expression #1, char 44: unterminated address regex
我猜问题出在支架上。
问题:
这里有什么问题以及如何修复该命令和/或是否有其他方法可以做到这一点?
答案1
尝试这个,
sed -i '/deb cdrom:\[Debian GNU\/Linux 9\.4\.0 _S/s/^/#/' /etc/apt/sources.list
- 我们需要在搜索模式中转义
[
,/
和,因为它是分隔符,并且和是正则表达式运算符。.
/
[
.
答案2
由于搜索字符串是一个常量,并且正则表达式元字符的存在是刺激因素,因此您也可以按如下方式执行此操作:
awk -i inplace 'index($0, "deb cdrom:[Debian GNU/Linux 9.4.0 _S"){$0 = "#" $0}1' /etc/apt/sources.list
如果您可以使用 GNU awk4.1.0
或更高版本来获得就地编辑效果,那么您很幸运。 OTW,你可以这样做Perl
:
perl -pi -e 's/^/#/ if index($_, "deb cdrom:[Debian GNU/Linux 9.4.0 _S") + 1' /etc/apt/sources.list