Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Sed:如何替换包含多个特殊字符的字符串?_Regex_Sed - Fatal编程技术网

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

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

我试图通过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
以上都不起作用

有人能帮我用正确的正则表达式吗


提前谢谢

好吧
sudoers
并不意味着任何人都可以写,即使是root用户。出于安全原因,您应该使用
visudo
命令来编辑它

我想你可能会把它倒过来,因为
sed
替换的第一部分是查找。第二部分是替换。因此,您可能希望执行以下操作:

sed -i 's/^Defaults:nagios !requiretty$/#Defaults:nagios/'
这也将删除
要求
。如果您只想添加
#
,只需执行以下操作:

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

根据你的描述,我不清楚这行在编辑之前是什么样子,编辑之后应该是什么样子。了解其他线条的外观也很重要。如果没有类似的文件,正则表达式可以简单得多…提示:在开发正则表达式时,从最简单的部分开始,逐步添加细节。这样你就知道哪个部分有效了。谢谢你的回复,你的第二个命令就是我要找的。
&
是否代表sed的
find
模式?@itaiga不太像——它是第0个匹配项,或者与模式匹配的任何内容。您也可以对其他捕获组使用
\1
等,但您不使用此模式进行任何捕获。