批量查找指定字符并替换。

 

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/

版权声明:本文为kongzhongqijing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/kongzhongqijing/articles/8459069.html