如何使用 ack 查找包含两种模式的文件?

mrt*_*mgs 3 bash shell pipe ack

我正在尝试搜索包含 2 个模式的文件。我猜管道是要走的路,但我做错了什么,因为以下不起作用:

ack -l "pattern1" | ack -l "pattern2"
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

And*_*ter 5

我从您的问题中得知,您需要包含模式 1 和模式 2 的文件,即使它们位于不同的行上。

这是一种方法:

ack -l pattern2 $(ack -l pattern1)
Run Code Online (Sandbox Code Playgroud)

这是另一个:

ack -l pattern1 | ack -l -x pattern2
Run Code Online (Sandbox Code Playgroud)

上面-x写着“从标准输入中获取要搜索的文件列表,就好像我是xargs程序一样。” (假设您使用的是 ack 2.x 或更高版本)

  • 也许将 `-s` 添加到第一个片段中,以消除由于第一个 `ack` 调用不返回任何内容(如果不匹配)而导致的可能令人困惑的错误消息。 (2认同)