![如何递归地进行多行搜索和替换文本(删除)](https://linux22.com/image/24876/%E5%A6%82%E4%BD%95%E9%80%92%E5%BD%92%E5%9C%B0%E8%BF%9B%E8%A1%8C%E5%A4%9A%E8%A1%8C%E6%90%9C%E7%B4%A2%E5%92%8C%E6%9B%BF%E6%8D%A2%E6%96%87%E6%9C%AC%EF%BC%88%E5%88%A0%E9%99%A4%EF%BC%89.png)
我想递归地遍历目录并搜索所有文件中的特定内容。如果发现该内容,则应予以替换。用一行我会做这样的事情:
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 的“保留缓冲区”,对其运行正则表达式,然后写出更改的文件。但是,如果您的文件很大,因为您一次将整个文件加载到内存中,那么这种方法可能会相当慢。