Regex Sed不使用正则表达式
我有一个Regex Sed不使用正则表达式,regex,linux,bash,sed,Regex,Linux,Bash,Sed,我有一个文件.php,它是在外部更改的,带有如下行: echo "\n<!-- BEGIN APP v" . APP_VERSION . " - http://saite.com/ -->\n"; echo“\n\n”; 知道它仍将遵循的模式,我需要使用换行符来抑制此消息 但我找不到办法。我尝试从终端运行此代码: PAT="<!-- BEGIN APP [^>]+>" TO="" sed -i "s/$PAT/$TO/g" file.php PAT=“我已经通
文件.php
,它是在外部更改的,带有如下行:
echo "\n<!-- BEGIN APP v" . APP_VERSION . " - http://saite.com/ -->\n";
echo“\n\n”;
知道它仍将遵循的模式,我需要使用换行符来抑制此消息
但我找不到办法。我尝试从终端运行此代码:
PAT="<!-- BEGIN APP [^>]+>"
TO=""
sed -i "s/$PAT/$TO/g" file.php
PAT=“我已经通过使用*
而不是regex中的+
和附加选项-r
解决了这个问题
sed -i -r ...
多亏了@tripleee和@andlrc,我用*
而不是正则表达式中的+
和附加选项-r
解决了这个问题
sed -i -r ...
感谢@tripleee和@andlrc当shell解释时,感叹号是一个历史命令,因此第一个PAT=“确认”,但我没有看到该消息。。。我的命令在脚本中。可能是这个原因。默认情况下,历史扩展不会从脚本中进行。许多sed
实现的regex指令集非常有限。尝试使用*
而不是+
(或者如果您的sed
有-r
选项,则添加一个-r
选项)。@tripleee指的是sed在默认情况下使用BRE,其中+
是文本,使用-r
将启用纪元字符,正如您所期望的那样。请注意,要在BSD sed上启用ERA,应使用-E
。当shell解释时,感叹号是一个历史命令,因此第一个命令=“确认,但我看不到那条信息。。。我的命令在脚本中。可能是这个原因。默认情况下,历史扩展不会从脚本中进行。许多sed
实现的regex指令集非常有限。尝试使用*
而不是+
(或者如果您的sed
有-r
选项,则添加一个-r
选项)。@tripleee指的是sed在默认情况下使用BRE,其中+
是文本,使用-r
将启用纪元字符,正如您所期望的那样。请注意,要在BSD sed上启用ERA,应使用-E
。