Linux中grep查找含有某字符串的所有文件


在項目中,經常會遇到批量修改表名或者key/ password的情況。

如果服務器上只有1個項目,我們可以在pycharm中全局搜索,然后替換。但如果服務器上有多個項目,不清楚這些表名/key/ password都在哪些項目中的哪些文件中,一個個打開pycharm查找有些麻煩,還可能會漏掉;所以可以考慮使用grep命令,在服務器上查看需要替換的表名/key/ password都在哪些項目/文件中,然后再打開pycharm進行全局搜索並替換。

 

1、Grep選項:
* : 表示當前目錄所有文件,也可以是某個文件名
-r 是遞歸查找
-n 是顯示行號
-R 查找所有文件包含子目錄
-i 忽略大小寫

2、有意思的命令行參數:
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 的行

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

 

4、例子:

 1 --遞歸查找目錄下含有該字符串的所有文件
 2 grep -rn "data_chushou_pay_info"  /home/hadoop/nisj/automationDemand/
 3  
 4 --查找當前目錄下后綴名過濾的文件
 5 grep -Rn "data_chushou_pay_info" *.py
 6  
 7 --當前目錄及設定子目錄下的符合條件的文件
 8 grep -Rn "data_chushou_pay_info" /home/hadoop/nisj/automationDemand/ *.py
 9  
10 --結合find命令過濾目錄及文件名后綴
11 find /home/hadoop/nisj/automationDemand/ -type f -name '*.py'|xargs grep -n 'data_chushou_pay_info'

 


免責聲明!

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



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