为什么我从grep -oc“foo”文件和grep -o“foo”文件获得不同的答案? wc -l? 哪个是对的?

这个问题说明了这一切…我试图find大文件中特定string的出现次数。
答案是类似的… …像pipe道50000左右,49000单纯只是平原grep – oc …

任何人都可以解释为什么我得到不同的答案,哪一个是正确的?

谢谢您的帮助。

grep -c只计算匹配的行数,而grep -o在一个单独的行上打印每个匹配的部分,这意味着wc -l会打印比实际匹配更多的“行”。

据我grep -ocgrep -ocgrep -c之间没有任何有效的区别,因为压缩打印意味着不再有-o结果效果。

例如,用一个双重匹配和一个单独的匹配打印三行“文件”:

 $ printf 'foo foo\nbar\nfoo\n' | grep -oc foo 2 $ printf 'foo foo\nbar\nfoo\n' | grep -o foo foo foo foo 

--only-matching-o )模式下,grep有时会为单个匹配行输出多行。

 alex@yuzu:~$ echo -e "foo\nbar\nbaz" foo bar baz alex@yuzu:~$ echo -e "foo\nbar\nbaz" | grep -ooo o 

但是--count-c )会计算匹配的行数。

 alex@yuzu:~$ echo -e "foo\nbar\nbaz" | grep -oc o 1 

所以grep -oo | wc -l grep -oo | wc -l计算所有的比赛,即使在一条线上有多个比赛。