sed:-e表达式#1,字符44:未终止的地址正则表达式

sed:-e表达式#1,字符44:未终止的地址正则表达式

问题:

我正在编写一个脚本来配置 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

相关内容