1: linux 批量查找与替换
https://www.cnblogs.com/kongzhongqijing/articles/8459069.html
2: Linux xargs 命令
https://www.runoob.com/linux/linux-comm-xargs.html
3: Linux 命令大全
https://www.runoob.com/linux/linux-command-manual.html
批量查找指定字符并替换。
1、sed与grep配合
格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径`
或者 grep -rl 查找字段 路径|xargs sed -i "s/查找字段/替换字段/g"
grep -r 指定目录递归查找
实例:
sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`
sed -i "s/www.admin99.net/admin99.net/g" `grep www.admin99.net -rl /home` #替换/home下所有文件中的www.admin99.net为admin99.net
exp:sed -i "s/shabi/$/g" `grep shabi -rl ./`
或者
grep -rl matchstring somedir/ | xargs sed -i 's/string1/string2/g'
grep -rl 'windows' ./path | xargs sed -i 's/windows/linux/g'
sed -i 's/old-word/new-word/g' *.txt
sed 's/old/new/g' input.txt > output.txt
将文件1.txt内的文字“garden”替换成“mirGarden”
# sed -i "s/garden/mirGarden/g" 1.txt //sed -i 很简单
将当前目录下的所有文件内的“garden”替换成“mirGarden”
## sed -i "s/garden/mirGarden/g" `ls` //其实也就是ls出多个文件名而已
#!/bin/bash OLD="xyz" NEW="abc" DPATH="/home/you/foo/*.txt" BPATH="/home/you/bakup/foo" TFILE="/tmp/out.tmp.$$" [ ! -d $BPATH ] && mkdir -p $BPATH || : for f in $DPATH do if [ -f $f -a -r $f ]; then /bin/cp -f $f $BPATH sed "s/$OLD/$NEW/g" "$f" > $TFILE && mv $TFILE "$f" else echo "Error: Cannot read $f" fi done /bin/rm $TFILE
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
linux下查找某目录下所有文件包含某字符串的命令
#从文件内容查找匹配指定字符串的行: $ grep "被查找的字符串" 文件名 #从文件内容查找与正则表达式匹配的行: $ grep –e “正则表达式” 文件名 #查找时不区分大小写: $ grep –i "被查找的字符串" 文件名 #查找匹配的行数: $ grep -c "被查找的字符串" 文件名 #从文件内容查找不匹配指定字符串的行: $ grep –v "被查找的字符串" 文件名 #从根目录开始查找所有扩展名为.txt的文本文件,并找出包含"linux"的行 find . -type f -name "*.txt" | xargs grep "linux"
参考资料:
http://www.cyberciti.biz/faq/unix-linux-replace-string-words-in-many-files/