Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.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_Linux_Bash_Sed - Fatal编程技术网

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