2014-10-27 133 views
0

我试图通过shell脚本在/etc/sudoers中评论一行。 这是相关行我想编辑:Sed:如何替换包含多个特殊字符的字符串?

# 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 

工作的以上都不是。 ..

有人可以请帮助我正确的正则表达式吗?提前

+2

从你的描述,目前还不清楚我是什么行看起来像以前一样,它应是什么样的编辑之后。了解其他线路的外观也很重要。如果没有类似的文件,那么正则表达式可以更简单...提示:当开发一个正则表达式开始时使用最简单的部分并逐步添加细节。这样你就会知道哪部分工作。 – 2014-10-27 19:17:14

回答

1

感谢嗯... sudoers并不意味着被任何人写的 - 甚至根本。出于安全原因,您应该使用visudo命令编辑它。

我认为你可能会倒退,因为sed替代的第一部分是找到。第二部分是替代品。所以你会想这样做:

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

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

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

感谢您的回复,您的第二条命令就是我正在寻找的命令。 '&'代表sed的'find'模式吗? – 2014-10-27 19:21:25

+0

@ItaiGanot非常多 - 这是第0场比赛或任何与该模式相匹配的东西。你也可以对其他捕获组使用'\ 1'等,但是你没有用这种模式进行捕获。 – 2014-10-27 19:25:26

相关问题