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

Linux 从所有文件中删除关闭的PHP标记,linux,sed,terminal,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 -

我试图从网站上的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;}'

有关递归文件匹配的更多具体解决方案,请参见

对不起,这似乎不起作用。当我输入命令时,它只会将我带到另一个line@Ember不知道你所说的“转到另一行”是什么意思,
sed
命令对不起,我应该在我的评论中说得更清楚些。当我在终端中按enter键时,似乎什么也没有发生,终端中的光标只是移动到下一行。我已设法使它一次在一个目录中工作,但它没有进入任何似乎工作的子目录!谢谢你,我正在看你链接的问题,但遗憾的是我没有那么精明(我正在学习)。在我接受答案之前,我将用它再运行几个测试,以再次检查一切是否按预期工作(我相信它会)。