批量查找指定字符並替換。
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'
linux下查找某目錄下所有文件包含某字符串的命令
參考資料:
http://www.cyberciti.biz/faq/unix-linux-replace-string-words-in-many-files/