首页 > 解决方案 > 为什么这些模式返回相同的结果?

问题描述

我看到了这个问题:count (non-blank) lines-of-code in bash

我理解这种模式是正确的。

grep -vc ^$ filename

为什么这种模式返回相同的结果?

grep -c '[^ ]' filename

什么是诡计'[^ ]'

标签: grep

解决方案


$ printf 'foo 123\n  \nxyz\n\t\n' > ip.txt
$ cat -T ip.txt
foo 123
  
xyz
^I

$ grep -vc '^$' ip.txt
4
$ grep -c '[^ ]' ip.txt
3
$ grep -c '[^[:blank:]]' ip.txt
2

grep -c '[^ ]'计算具有非空格字符的任何行。例如,foo 123将被计算在内,因为字母不是空格字符。因此,使用哪一个取决于是否应计算仅包含空格字符的行。


推荐阅读