Sed:如何替换包含多个特殊字符的字符串?

时间:2014-10-27 19:10:36

标签: regex sed

我正在尝试通过shell脚本评论/etc/sudoers中的一行。 这是我想编辑的相关行:

# grep '\!requiretty' /etc/sudoers
Defaults:nagios !requiretty

但似乎我与sed一起使用的模式不正确,我的尝试:

# sed -i 's/^Defaults\:nagios$/#Defaults:nagios !requiretty/g' /etc/sudoers
# sed -i 's/^Defaults:nagios$/#Defaults:nagios !requiretty/g' /etc/sudoers
# sed -i 's/^Defaults:nagios$/#Defaults:nagios !requiretty/g' /etc/sudoers
# sed -i 's/^Defaults:nagios$/\#Defaults:nagios !requiretty/g' /etc/sudoers
# sed -i 's/^Defaults:nagios$/\#Defaults:nagios \!requiretty/g' /etc/sudoers
# sed -i 's/^Defaults:nagios$/^#Defaults:nagios !requiretty/g' /etc/sudoers
# sed -i 's/^Defaults\:nagios$/^#Defaults:nagios !requiretty/g' /etc/sudoers
# sed -i 's/^Defaults\:nagios$/#Defaults:nagios \!requiretty/g' /etc/sudoers

以上都没有工作......

有人可以帮助我使用正确的正则表达式吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

嗯...... sudoers并不意味着任何人都可写 - 甚至是root。出于安全原因,您应该使用visudo命令对其进行编辑。

我认为你可能会倒退,因为sed替换的第一部分是 find 。第二部分是替代品。所以你想要做的事情如下:

sed -i 's/^Defaults:nagios !requiretty$/#Defaults:nagios/'

这也将删除requiretty。如果你想要的只是添加你可以做的#

sed -i 's/^Defaults:nagios !requiretty$/#&/'