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
的文件列表
.
指当前目录,递归查找
我想在 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
的文件 ( -i
:不区分大小写,-r
:递归,-Z
:由 ascii null(文件名的安全分隔符)分隔的文件列表- 将列表通过管道传递给 xargs,使用空分隔符,将其传递给第二个 grep
- 第二个 grep 筛选包含
string2
的文件列表
.
指当前目录,递归查找
-l
)