grep 和操作

grep AND Operations

我想在 grep 中模拟 AND 操作。列出文件中所有包含“Some Words”和“Some Other Words”的文件。

到目前为止我试过了#

egrep  -lir '(Some Words)(Some Other Words)' *.myfiles

但它不起作用。

根据定义 grep 是一种工具,可以逐行 查找模式 并打印匹配的模式,如其 man page 中所述。无法使用单个 grep 在多行上进行 grep,除非按照 Dan 的回答中所述,您将 grep 与 GNU 工具一起使用。

如果我们想在同一行上进行 grep,并且“一些词”和“其他一些词”的顺序无关紧要,您可以运行以下命令:

egrep -lir "(Some Words.*Some Other Words)|(Some Other Words.*Some Words)"

如果顺序很重要,那么在上面的命令中删除错误的顺序即可。例如,如果正确的顺序是先是“Some Words”,然后是“Some Other Words”,则命令应如下所示:

egrep -lir "Some Words.*Some Other Words"

使用 GNU 工具:

grep -lirZ string1 . | xargs -d '[=10=]' grep -li string2
  • 第一个 grep 列出包含 string1
  • 的文件 (-l)
  • -i:不区分大小写,-r:递归,-Z:由 ascii null(文件名的安全分隔符)分隔的文件列表
  • 将列表通过管道传递给 xargs,使用空分隔符,将其传递给第二个 grep
  • 第二个 grep 筛选包含 string2
  • 的文件列表
  • .指当前目录,递归查找