gpt4 book ai didi

linux - 从所有文件中删除结束 PHP 标记

转载 作者:太空狗 更新时间:2023-10-29 11:16:59 24 4
gpt4 key购买 nike

我正在尝试从网站上的 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 结束标记的文件。

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

我觉得我很接近,只是错过了一些东西。

最佳答案

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

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? 查看递归文件匹配的更多具体解决方案

关于linux - 从所有文件中删除结束 PHP 标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56478233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com