1. 程式人生 > >Linux中grep查詢含有某字串的所有檔案

Linux中grep查詢含有某字串的所有檔案

在專案中,經常會遇到原始表名等已更換需要在指令碼中批量替換的情況。但是這些涉及到哪些表,一個個的查詢有些麻煩還可能會漏掉;直接在Linux上替換掉可能不能進行很好的版本同步;所以,可以考慮通過find與grep命令組合先查找出需要修改的指令碼再進行統一處理。
--遞迴查詢目錄下含有該字串的所有檔案
grep -rn "data_chushou_pay_info"  /home/hadoop/nisj/automationDemand/

--查詢當前目錄下字尾名過濾的檔案
grep -Rn "data_chushou_pay_info" *.py

--當前目錄及設定子目錄下的符合條件的檔案
grep -Rn "data_chushou_pay_info" /home/hadoop/nisj/automationDemand/ *.py

--結合find命令過濾目錄及檔名字尾
find /home/hadoop/nisj/automationDemand/ -type f -name '*.py'|xargs grep -n 'data_chushou_pay_info'
最終的:find /home/hadoop/nisj/automationDemand/ -type f -name '*.py'|xargs grep -n 'data_chushou_pay_info'】比較滿足查詢的要求。

Grep選項:
* : 表示當前目錄所有檔案,也可以是某個檔名
-r 是遞迴查詢
-n 是顯示行號
-R 查詢所有檔案包含子目錄
-i 忽略大小寫

有意思的命令列引數:
grep -i pattern files :不區分大小寫地搜尋。預設情況區分大小寫
grep -l pattern files :只列出匹配的檔名,不列出路徑
grep -L pattern files :列出不匹配的檔名
grep -w pattern files :只匹配整個單詞,而不是字串的一部分(如匹配‘magic’,而不是‘magical’)
grep -C number pattern files :匹配的上下文分別顯示[number]行
grep pattern1 | pattern2 files
:顯示匹配 pattern1 或 pattern2 的行
grep pattern1 files | grep pattern2 :顯示既匹配 pattern1 又匹配 pattern2 的行

有些用於搜尋的特殊符號:
\< 和 \> 分別標註單詞的開始與結尾。
例如:
grep man * 會匹配 ‘Batman’、‘manic’、‘man’等
grep '\<man' * 匹配‘manic’和‘man’,但不是‘Batman’
grep '\<man\>' 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字串。
'^':指匹配的字串在行首
'$':指匹配的字串在行尾