如何计算文件中空白字符的数量?

Arm*_*and 4 whitespace wc

我想计算文件中空白字符的数量。我能想到的最好的办法是:

tr -cd [:space:] < my_file | wc
Run Code Online (Sandbox Code Playgroud)

有更简洁的方法吗?

Sté*_*las 5

tr -cd '[:space:]' < my_file | wc -m
Run Code Online (Sandbox Code Playgroud)

会工作。但对于 GNU 来说tr,这只能在每个字符的单字节语言环境中工作(通常不适用于 UTF-8 语言环境),或者只能在 UTF-8 语言环境中使用 ASCII 输入。

如果没有引号,您会在 csh、tcsh 或 zsh 中收到错误消息(除非满足下面的条件),并且在大多数 shell 中,如果当前目录中[:space:]有一个名为:spac的文件,则会失败是一个外壳球体。e[:space:]

另请注意,wc默认情况下不计算字符(仅当未给出任何选项时才计算字节、单词和换行符)。

通过 GNU,awk您可以使用:

awk -v RS='[[:space:]]' 'END{print NR}'
Run Code Online (Sandbox Code Playgroud)

例子:

$ printf '\0\u2006\t\r\n' | awk -v RS='[[:space:]]' 'END{print NR}'
4
Run Code Online (Sandbox Code Playgroud)

(对于 U+2006 SIX-PER-EM SPACE、 TAB 、 CR 和 NL 字符,这些字符在我的语言环境中都被归类为空白)。