如何使用 macos grep 将文件视为大字符串?

Dev*_*hon 3 macos grep

我在 Ubuntu 上使用以下命令列出包含给定模式的所有文件:

for f in *; do if grep -zoPq "foo\nbar" $f; then echo $f; fi; done
Run Code Online (Sandbox Code Playgroud)

但是在 macos 上,我收到以下错误:

grep: invalid option -- z
Run Code Online (Sandbox Code Playgroud)

-z与 gnu grep 不同,没有选项可以使用 macos grep 将文件视为大字符串。

macos 上是否有另一个选项grep相当于 `-z ?如果没有,我可以使用什么替代方法来获得相同的结果?

anu*_*ava 5

-P(PERL regex) 仅在 Mac OSgnu grep上的 BSD 中受支持,但在 BSD 中不受支持grep

您可以使用home brew来安装gnu grep或使用此等效awk命令:

awk 'p ~ /foo$/ && /^bar/ {print FILENAME; nextfile}; {p=$0}' *
Run Code Online (Sandbox Code Playgroud)

请注意,这消除了使用 shellfor循环的需要。