File 如何替换文件中的某些字符和EOF

File 如何替换文件中的某些字符和EOF,file,shell,search,sed,ack,File,Shell,Search,Sed,Ack,在一些PHP文件中,我想替换“?>\s\t\n\EOF”。 我使用以下方法对出现此问题的所有文件进行搜索: ack "\?\>[\s\n\t]+\z" 我接受结果,但我只想将其替换为?>EOF。 我使用“sed”测试另一个命令: 你有什么建议吗 例如: ?> ack是基于perl的,sed不能识别\z之类的东西。使用perl: perl -pe 's/\?\>[\s\n\t]+\z/?>\n/' 而且,\z不是EOF,只是字符串的结尾,因此\z将匹配每行的结尾。

在一些PHP文件中,我想替换
“?>\s\t\n\EOF”
。 我使用以下方法对出现此问题的所有文件进行搜索:

ack "\?\>[\s\n\t]+\z"
我接受结果,但我只想将其替换为
?>EOF
。 我使用“sed”测试另一个命令:

你有什么建议吗

例如:

?>  

ack是基于perl的,sed不能识别\z之类的东西。使用perl:

perl -pe 's/\?\>[\s\n\t]+\z/?>\n/'

而且,\z不是EOF,只是字符串的结尾,因此\z将匹配每行的结尾。如果希望仅在文件末尾匹配,则需要使用\z以外的内容。

您需要更清楚地解释您要做的事情。我怀疑您可能试图删除包含PHP关闭标记的文件最后一行之后的尾随空格、制表符和换行符,但这并不清楚。你能举一个例子说明你的输入文件(在一个最小的例子中可能是4行)和你想要的输出吗。至于提示,大多数版本的
sed
默认情况下不识别Perl正则表达式;有些人可以选择。这是什么意思?什么是EOF?我明白了,通过与MS-DOS和Ctrl-Z的关联:
perl -pe 's/\?\>[\s\n\t]+\z/?>\n/'