![](/img/trans.png)
[英]why different output of ' grep “*.h” ' and ' grep -E “*.h” ' on the same file
[英]Why am I getting different answers from grep -oc “foo” file and grep -o “foo” file | wc -l ? Which is correct?
这个问题确实说明了一切……我正在尝试查找大文件中特定字符串出现的次数。
答案是相似的。。。。。。。。。。。。。。。。。。。。。。。。。。
谁能解释为什么我得到不同的答案,哪个是正确的?
谢谢您的帮助。
grep -c
仅计算匹配行,而grep -o
每个匹配部分打印在单独的行上,这意味着wc -l
将打印比实际匹配更多的“行”。
据我grep -oc
, grep -oc
和grep -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 -o o
o
o
但是使用--count
( -c
)它将计算匹配的行数。
alex@yuzu:~$ echo -e "foo\nbar\nbaz" | grep -oc o
1
所以grep -oo | wc -l
即使单行中有多个匹配项, grep -oo | wc -l
也会计算所有匹配项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.