Regex Sed:如何替换包含多个特殊字符的字符串?
我试图通过shell脚本对Regex Sed:如何替换包含多个特殊字符的字符串?,regex,sed,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:n
/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
以上都不起作用
有人能帮我用正确的正则表达式吗
提前谢谢好吧
sudoers
并不意味着任何人都可以写,即使是root用户。出于安全原因,您应该使用visudo
命令来编辑它
我想你可能会把它倒过来,因为sed
替换的第一部分是查找。第二部分是替换。因此,您可能希望执行以下操作:
sed -i 's/^Defaults:nagios !requiretty$/#Defaults:nagios/'
这也将删除要求
。如果您只想添加#
,只需执行以下操作:
sed -i 's/^Defaults:nagios !requiretty$/#&/'
根据你的描述,我不清楚这行在编辑之前是什么样子,编辑之后应该是什么样子。了解其他线条的外观也很重要。如果没有类似的文件,正则表达式可以简单得多…提示:在开发正则表达式时,从最简单的部分开始,逐步添加细节。这样你就知道哪个部分有效了。谢谢你的回复,你的第二个命令就是我要找的。
&
是否代表sed的find
模式?@itaiga不太像——它是第0个匹配项,或者与模式匹配的任何内容。您也可以对其他捕获组使用\1
等,但您不使用此模式进行任何捕获。