2017-06-13 35 views
0

我在文件夾和子文件夾中有很多文件。 我有一個名爲patterns.txt的文件,每行包含模式。 現在我想找到符合所有這些模式的文件。模式可以以任何順序。我如何找到包含多種模式的文件

patterns.txt

userdata 
"/" 
"{a: 1}" 

我的文件是JSON例如

"userdata": "" 
"dir": "/" 
"mdict": {a: 1} 

我能找到一個模式或最多兩個模式而不是多像下面

find /logs/ -name "*.json" -exec grep -rni 'userdata' /dev/null {} \; | cut -d":" -f1 | grep -rni '"/"' 

是否可以從文件中獲取模式並匹配所有模式?

+0

所以在你的情況下不應該有任何輸出,導致第三個模式'「{a:1}」'不匹配 – RomanPerekhrest

+0

https:/ /unix.stackexchange.com/questions/55359/how-to-run-grep-with-multiple-and-patterns – stevesliva

回答

0

,你是他需要egrepgrep -E爲GNU的grep(僅OR):

$ egrep -nri "userdata|dir|..." 
$ grep -nriE "userdata|dir|..." 

,如果你想使用AND匹配多行:

$ find /logs/ -name "*.json" |xargs grep -izl "$(cat patterns.txt |tr '\n' 'x' |sed 's/x/.*/g')" 

-z,--null - 數據數據行以0字節結束,而不是換行

-l, - -files-with-matches只打印包含匹配的文件名稱

+0

只會做OR,我想做AND – user3214546

+0

抱歉誤解您的需求。 – Weike

相關問題