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