【发布时间】:2012-11-10 11:06:04
【问题描述】:
在count (non-blank) lines-of-code in bash 中,他们解释了如何计算非空行的数量。
但是有没有办法计算文件中的空白行数?空行是指其中有空格的行。
【问题讨论】:
标签: unix sed grep text-files
在count (non-blank) lines-of-code in bash 中,他们解释了如何计算非空行的数量。
但是有没有办法计算文件中的空白行数?空行是指其中有空格的行。
【问题讨论】:
标签: unix sed grep text-files
另一种方式是:
grep -cvP '\S' file
-P '\S'(perl regex) 将匹配任何包含非空格的行-v 选择不匹配的行-c 打印匹配行数如果您的 grep 不支持 -P 选项,请使用 -E '[^[:space:]]'
【讨论】:
grep -cvE '[^[:space:]]'
grep -cvE '\S' file
grep -cvE '\S' file 和 grep -cv '\S' file 也可以。它们比-P 快还是慢,取决于硬件和grep 版本。例如。 grep 版本 2.25 和 Intel(R) Atom(TM) CPU N270 @ 1.60GHz perl 正则表达式速度较慢,而 grep 版本 2.16 和 Intel(R) Core(TM)2 CPU 6400 @ 2.13GHz perl 正则表达式速度更快。
一种使用grep的方式:
grep -c "^$" file
或者用空格:
grep -c "^\s*$" file
【讨论】:
time测量执行时间。
您也可以为此使用awk:
awk '!NF {sum += 1} END {print sum}' file
从手册中,“变量 NF 设置为输入记录中的字段总数”。由于默认的字段分隔符是空格,因此任何不包含任何内容或包含一些空格的行都将具有NF=0。
然后,就是计算这种情况发生了多少次了。
$ cat a
aa dd
ddd
he llo
$ cat -vet a # -vet to show tabs and spaces
aa dd$
$
ddd$
$
^I$
he^Illo$
现在让我们来计算空行的数量:
$ awk '!NF {s+=1} END {print s}' a
3
【讨论】:
grep -cx '\s*' file
或
grep -cx '[[:space:]]*' file
这比史蒂夫回答中的代码要快。
【讨论】:
使用 Perl 单行:
perl -lne '$count++ if /^\s*$/; END { print int $count }' input.file
【讨论】:
grep -v '\S' | wc -l
(在 OSX 上 Perl 表达式不可用,-P 选项)
【讨论】:
要计算您的同事在项目中插入了多少无用的空白行,您可以像这样启动一行命令:
blankLinesTotal=0; for file in $( find . -name "*.cpp" ); do blankLines=$(grep -cvE '\S' ${file}); blankLinesTotal=$[${blankLines} + ${blankLinesTotal}]; echo $file" has" ${blankLines} " empty lines." ; done; echo "Total: "${blankLinesTotal}
这打印:
<filename0>.cpp #blankLines
....
....
<filenameN>.cpp #blankLines
Total #blankLinesTotal
【讨论】: