linux 批量查找與替換


批量查找指定字符並替換。

 

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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM