44

bash 中的 count (non-blank) lines-of-code 中,他们解释了如何计算非空行的数量。

但是有没有办法计算文件中的空白行数?空行是指其中有空格的行。

4

7 回答 7

65

另一种方法是:

grep -cvP '\S' file
  • -P '\S'(perl regex) 将匹配任何包含非空格的行
  • -v选择不匹配的行
  • -c打印匹配行数

如果您的 grep 不支持-P选项,请使用-E '[^[:space:]]'

于 2012-11-22T04:57:07.533 回答
25

一种使用方式grep

grep -c "^$" file

或使用空格:

grep -c "^\s*$" file 
于 2012-11-22T04:55:54.943 回答
2

使用 Perl 单线:

perl -lne '$count++ if /^\s*$/; END { print int $count }' input.file
于 2013-12-13T07:22:14.093 回答
2

您也可以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
于 2015-04-01T12:41:03.477 回答
2

grep -cx '\s*' file

或者

grep -cx '[[:space:]]*' file

这比史蒂夫答案中的代码要快。

于 2018-03-13T16:00:24.080 回答
1

要计算您的同事在项目中插入了多少无用的空行,您可以启动如下一行命令:

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
于 2015-03-24T12:51:12.183 回答
1
grep -v '\S' | wc -l

(在 OSX 上,Perl 表达式不可用,-P 选项)

于 2015-09-15T21:21:12.497 回答