我正在尝试从网站上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结束标记的文件。
我希望它在最后一行找到所有带有?>
的文件(我可以使它工作),然后用标记删除最后一行。
我觉得我已经很近了,只是缺少了一些东西。
答案 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?上查看递归文件匹配的更多具体解决方案