linux文本处理:多文件批量查找替换

方法一:

sed -i "s/旧字符串/新字符串/g" `grep 旧字符串 -rl 目录`

(上面右边的不是单引号,是键盘上面数字1左边的按键的符号)

其中,grep aaa -rl /www 是查找出包含字符串“aaa”的文件列表。

例如:

把 /www/test.com目录下的所有文件中包含baidu的都替换成google

sed -i "s/baidu/google/g" `grep baidu -rl /www/test.com`


方法二:

perl -pi -e "s/baidu/google/g" /www/*.htm /www/*.txt

将www文件夹下所有的htm和txt文件中的“baidu”都替换为“google”

这种方式就是不用给出包含“baidu”字符串的文件列表,它会自己查找,找到了就替换。


方法三:

perl -pi -e 's|baidu|google|g' `find /www -type f`

将www文件夹下所有文件,不分扩展名,所有的“baidu”都替换为“google”

这种方式还有个特点,就是指定查找复杂的html代码,例如 <a href="#">aaa</a> ,为什么上面两种不行呢?因为上面两种在命令中出现了双引号或者斜杠,如果你要查找的字符也包含双引号或斜杠,就会使命令匹配时出现问题,无法完成任务。

perl -pi -e 's|<a href="#">aaa</a>|<a href="/">Home</a>|g' *

将当前目录下所有文件进行查找替换,将 <a href="#">aaa</a> 替换为 <a href="/">Home</a>

标签: linux, sed, 文本处理, perl

添加新评论