无法在my.cnf中评论一行

时间:2017-07-29 13:11:27

标签: bash sed

问题:在my.cnf文件中有一行,如下所示:

...
bind-address        = 127.0.0.1
...

必须注释掉。我尝试使用sed:

sed -i 's/^[\s\t]*\(bind-address[\s\t]+=.*\)/#$1/g' my.cnf

但由于某种原因,它不起作用。

4 个答案:

答案 0 :(得分:5)

sed -i 's/^[\s\t]*\(bind-address[\s\t]+=.*\)/#$1/g' my.cnf

有一些错误

  • [\s\t]\s无法识别[]而无法识别,\s \t无法识别+
  • -E需要进行转义,因为BRE是默认设置,除非使用($1不应转发
  • \1应为g
  • sed -i 's/^\s*\(bind-address\s\+=.*\)/#\1/' my.cnf 不需要,因为这个正则表达式每行只能有一个匹配

所以,这是更正的版本

sed -i -E 's/^\s*(bind-address\s+=.*)/#\1/' my.cnf 

或使用ERE

sed -i -E 's/^\s*(bind-address\s+=)/#\1/' my.cnf

仍然可以简化为

href="?notation=1549220"

答案 1 :(得分:1)

尝试使用更短更简单的sed命令,例如......

sed -i -e 's/bind-address/\#bind-address/g' my.cnf

你没有使用正则表达式和其他人,因为bind-address只在my.cnf中使用过一次,没有其他行以此开头等等,这个有点脏或懒的方法是一个工作的。< / p>

答案 2 :(得分:0)

@Sundeep的回答非常清晰易懂。作为补充。解决方法可能是

sed -i 's/^\s*\(bind-address\s\{1,\}=.*\)/#\1/' my.cnf

+可以通过\{1,\}

进行模仿

答案 3 :(得分:0)

您还可以使用空格/制表符字符类(以及反向引用以避免重复):

sed -i 's/^\([[:space:]]*\)bind-address\1*/#&/' file