问题:在my.cnf文件中有一行,如下所示:
...
bind-address = 127.0.0.1
...
必须注释掉。我尝试使用sed:
sed -i 's/^[\s\t]*\(bind-address[\s\t]+=.*\)/#$1/g' my.cnf
但由于某种原因,它不起作用。
答案 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