【发布时间】:2015-07-18 21:15:18
【问题描述】:
m 正在寻找命令或脚本来搜索包含多行字符串的文件并显示文件名
示例 在 /var/tmp/ 中有多个文件 每个文件将包含以下内容
文件1:
约翰
2015年10月
富
戴尔
文件2:
戴夫
2014年9月
三星
文件3:
约翰
2014年10月
戴尔
等等
如何找到同时包含 John 和 2015 的文件?
【问题讨论】:
m 正在寻找命令或脚本来搜索包含多行字符串的文件并显示文件名
示例 在 /var/tmp/ 中有多个文件 每个文件将包含以下内容
文件1:
约翰
2015年10月
富
戴尔
文件2:
戴夫
2014年9月
三星
文件3:
约翰
2014年10月
戴尔
等等
如何找到同时包含 John 和 2015 的文件?
【问题讨论】:
在 grep 正则表达式中,您可以将 | 用于 OR。举个例子:
grep -rnw . -e "head"
它从当前目录中递归选择包含单词head的所有文件。
grep -rnw . -e "head\|footer"
相同的命令,但它选择带有单词head 或footer 的文件。
注意:转义需要反斜杠。您也可以在正则表达式中使用不带反斜杠的egrep。
【讨论】:
这就是你想要的,如果你有更多的“和”约束(包含 x 和 y 和 z 和 ...):
grep -l "John" *.txt | xargs grep -l "2015"
-l:这是一个小写的 L,意思是列出包含匹配项的文件的名称,而不是默认的逐行匹配输出。
*.txt:显然,将此参数替换为您正在查找匹配项的文件名列表所需的任何内容。
xargs:使用指定的参数以及从前面的 grep 的输出管道输入的文件名调用 grep。
【讨论】:
谢谢,两者都有效,但是当涉及到一个包含成千上万个文件的文件夹时,我开始收到参数太长的错误
grep -l "150728" * | xargs grep -l "克里斯"
-bash: /bin/grep: 参数列表太长
【讨论】: