2013年4月8日 星期一

[SHELL]搜尋檔案中的字串


案例1:
搜尋哪幾個sql檔中有用到某個table

方法:
1.find + grep
ex:
find ./ -name "*.sql" -exec grep -l "item_no" {} \; 2>/dev/null
(find 路徑 -name "檔案名稱" -exec grep -l "文件內容" {} \; 2>/dev/null)

2.find + xargs
ex:
find ./ -name "*.sql" | xargs grep "item_no"  2>/dev/null

備註:
2>/dev/null :
檔案描述元 - 標準輸入(STDIN),0/標準輸出(STDOUT),1/標準錯誤輸出(STDERR),2
/dev/null - 「訊息黑洞」,一般用來關閉程式的輸出訊息,只要把訊息往/dev/null丟,就不會顯示訊息

grep -l:只列出檔名。
grep -i:不分大小寫。
find -exec:對符合條件的檔案執行特定指令
xargs:將其他指令的輸出當成另一個指令的輸入參數

案例2:
搜尋哪幾個sql檔中有用到某些table

方法:
(利用for迴圈讀取資料表清單)
vDatFileName="vDataTable.txt"
vTableName=`cat ${vDatFileName}`
vLogFile="/home/tmp/DataTable.log"
for list in ${vTableName}
  do
   echo $list >>$vLogFile
   find /home/tmp -name "*.sql" -exec grep -l $list {} \; >>$vLogFile 2>/dev/null;
   #--find /home/tmp -name "*.sql" | xargs grep $list >>$vLogFile 2>/dev/null
  done

沒有留言: