我在 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 ?如果没有,我可以使用什么替代方法来获得相同的结果?
-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循环的需要。
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |