从所有文件中删除关闭的PHP标记

时间:2019-06-06 13:04:56

标签: linux sed terminal

我正在尝试从网站上PHP文件的末尾查找并删除所有关闭的PHP标签?>

我用过:

find . -type f -exec sh -c 'tail -n 1 "$1" | grep -q "?>" && printf "%s\n" "$1"' -- {} \;

这给了我一个以PHP标记结尾的所有文件的列表,该列表是预期的,但是该列表的长度也超过了500个文件,因此手动操作将花费大量时间。

我正在寻找一种相对简单的方法来做到这一点。

我尝试像这样使用sed

 find . -type f -exec sh -c 'tail -n 1 "$1" | grep -q "?>" && printf "%s\n" "$1"' -- {} \; | sed -i '$ d' ./*

但这有两个问题;它不会进入目录,并且会从所有文件中删除最后一行,而不仅仅是带有PHP结束标记的文件。

我希望它在最后一行找到所有带有?>的文件(我可以使它工作),然后用标记删除最后一行。

我觉得我已经很近了,只是缺少了一些东西。

1 个答案:

答案 0 :(得分:1)

要删除包含?>的最后一行,您可以使用

sed '${/?>/d;}'

'${/?>/d;}'的意思是:

  • $-仅获取最后一行
  • /?>/-仅在包含?>文本的情况下匹配该行
  • d-删除行。

要在目录上递归运行sed命令,请使用

cd /your/dir/here && find . -type f -print0 | xargs -0 sed -i '${/?>/d;}'

How to do a recursive find/replace of a string with awk or sed?上查看递归文件匹配的更多具体解决方案