使用find和sed
#首先尋找個數(sed -n)
find . -name '*.htm' | xargs sed -n '/old/p'
#然後替換(sed -i)
find . -name '*.htm' | xargs sed -i 's/old/new/g'
使用grep和sed
grep -l old *.htm | xargs sed -n "/old/p"
sed -n '/old/p' `grep -l old *.htm`
使用find和perl
find . -name '*.htm' | xargs perl -pi -e 's|old|new|g'
參考:
http://hi.baidu.com/msingle/blog/item/3b125b3fc0e1efe255e72375.html
http://blog.csdn.net/zhangboyj/article/details/6215429
// 使用 shell 在多個檔案中尋找
find . -type f | xargs grep flash
說明:
找出前目錄及其子目錄下的檔案中含有 flash 的檔案
//
重點記錄下 xargs 命令:
xargs 在標準輸入上取得參數列表、一行一個,再將他們以適當的大小組起來(由主機的 ARG_MAX 值決定)傳給另一個命令,此命令在作為 xargs 的參數.
ARG_MAX 值查看方法:
getconf ARG_MAX
//
//
在多個檔案中尋找使用命令替換也可以完成
grep flash $( find . -type f)
說明:
$() 是命令替換,括弧內是 shell 命令;shell 執行括弧內的命令並將整個 $(...) 替換為 命令的輸出
命令替換的形式有兩種,一種是 $(),另一種是使用兩個反引號 `find . -type f`
// 多個檔案中替換 - sed
為了保證不該替換的不被替換,先在檔案中尋找一下哪些會被替換
find -type f ! -path '*.svn*' | xargs sed -n '/Ookong inc/p'
說明:
1, find 首先過濾掉 .svn 目錄及其子目錄
2, xargs 傳遞參數給 sed 命令
3, sed 執行尋找, 只列印符合要求的行
//
// 替換
find -type f ! -path '*.svn*' | xargs sed -i 's/Ookong inc/Ookong Ltd. Co./g'
說明:
1, sed 的 i 選項直接在檔案中替換,而不是把替換結果列印出來
2, g 對每行中所有匹配執行替換
//
//
另外:一個 perl 多檔案尋找的程式: ack
-- 顯示所在的行號及所在的檔案