如何使用多个过滤器进行 grep 并一一打印?

J W*_*ang 2 linux grep

我需要计算日志中的一些模式,我可以使用

grep aaa ./logs | wc -l

grep bbb ./logs | wc -l
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以在一行中完成所有事情?喜欢

cat ./logs | grep -c aaa | grep -c bbb #didn't work.
Run Code Online (Sandbox Code Playgroud)

小智 5

您可以使用以下命令:

$ grep -oh -e aaa -e bbb ./logs | sort | uniq -c
Run Code Online (Sandbox Code Playgroud)

man grep,您可以读到:

-o, --only-matching 仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出行上。

另外,对于-h

-h, --no-filename 禁止输出中的文件名前缀。当只有一个文件(或只有标准输入)要搜索时,这是默认设置。

用于-e匹配任一者。然后,使用 来对结果进行排序和计数uniq