使用 sed 取消注释文本不起作用

使用 sed 取消注释文本不起作用

我正在尝试取消注释(nginx 配置)文件中的 4 行部分。使用 sed。我首先尝试使用 grep ,正则表达式似乎是正确的:

$ grep ^#.*bny /etc/nginx/sites-enabled/default
#        location /bny {

但是,当我尝试使用 sed 删除#行开头的 时,它失败了:

$ sudo sed -i '/^#.*bny/,+3 s/^#+//' /etc/nginx/sites-enabled/default
$ grep ^#.*bny /etc/nginx/sites-enabled/default
#        location /bny {

我想我使用相同的策略来使用 sed 注释该部分,并且效果很好:

sudo sed -i '/bny/,+3 s/^/#/' /etc/nginx/sites-enabled/default

即使双重评论也没有问题。取消注释我做错了什么?

答案1

+是基本正则表达式 (BRE) 语法中的文字,因此您的替换模式无法匹配。

您可以使用s/^##*//, s/^#\{1,\}//or (在 GNU sed 中) ,或使用or命令行选项s/^#\+//切换到扩展正则表达式 (ERE) 。-E-r

相关内容