如何查找包含多个模式的文件

时间:2017-06-13 03:36:48

标签: linux awk sed grep find

我在文件夹和子文件夹中有很多文件。 我有一个名为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 '"/"'

是否可以从文件中获取模式并匹配所有模式?

1 个答案:

答案 0 :(得分:0)

对于GNU grep(仅egrep),您可能需要grep -EOR

$ 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-data数据行以0字节结尾,而不是换行符

     

-l, - files-with-matches仅打印包含匹配项的FILE名称