我想递归地遍历目录并搜索所有文件中的特定内容。如果发现该内容,则应予以替换。用一行我会做这样的事情:
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 的“保留缓冲区”,对其运行正则表达式,然后写出更改的文件。但是,如果您的文件很大,因为您一次将整个文件加载到内存中,那么这种方法可能会相当慢。