如何递归地进行多行搜索和替换文本(删除)

如何递归地进行多行搜索和替换文本(删除)

我想递归地遍历目录并搜索所有文件中的特定内容。如果发现该内容,则应予以替换。用一行我会做这样的事情:

find . -type f -exec sed -i -e 's@code2replace@@g' {} \;

它有时有效,有时无效(硬盘空间不足......)。现在我需要一些东西来进行多重替换。原始文件应该被覆盖,并且多行模式可能相当长。所以我认为也许存储在外部文件中会更容易。

应替换的代码如下所示:

#c3284d#
echo(gzinflate(base64_decode("sylOLsos....")));
#/c3284d#

另外我必须转义哪些字符?

答案1

除了简单的搜索和替换之外,Sed 还可以做很多事情,其中​​包括多行支持。

这是一篇关于某人如何做到这一点的博客文章(他sedml为“sed multiline”编写了一个脚本:http://austinmatzko.com/2008/04/26/sed-multi-line-search-and-replace/

基本思想是将整个文件复制到 sed 的“保留缓冲区”,对其运行正则表达式,然后写出更改的文件。但是,如果您的文件很大,因为您一次将整个文件加载到内存中,那么这种方法可能会相当慢。

相关内容