我正在尝试取消注释(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