vlambda博客
学习文章列表

LINUX批量替换文件中的字符

1、sed与grep配合

格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径`  

或者  grep -rl 查找字段  路径|xargs sed -i "s/查找字段/替换字段/g" 

grep -r 指定目录递归查找

sed -i 's/"/"/g' `grep '"' -rl /usr/local/apache-jmeter-5.4.3/bin/jmx/log/feeds`


2、find

命令格式:find -name '要查找的文件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g' 

这里使用了perl语言,使用-e加上一段代码,从而批量地将当前目录及所有子目录下的file.log文件中的string1替换成了string2; string支持正则表达式 

 

#查找替换当前目录下包含字符串并进行替换

find -name '*.txt' | xargs perl -pi -e 's|智慧乡村|北部山区|g'

#递归查找替换

find . -type f -name '*.html' | xargs perl -pi -e 's|智慧乡村|北部山区|g'

 

3. awk

grep -i "windows" -r ./path | awk -F : '{print $1}' | sort | uniq | xargs sed -i 's/windows/linux/g'  

 这里使用了shell命令,先查找出文件,再用awk分割(以:切分),再行替换!

注意:   grep可以使用正则,也可以使用\转义一些特殊字符,比如“等  

sed -i 's/\"localhost\"/\"10.2.2.2\"/g' /home/my.conf