我在文件夹和子文件夹中有很多文件。
我有一个名为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 :(得分:0)
对于GNU grep(仅egrep
),您可能需要grep -E
或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-data数据行以0字节结尾,而不是换行符
-l, - files-with-matches仅打印包含匹配项的FILE名称