计算文件中的空格数

时间:2017-04-15 00:55:47

标签: bash macos grep

档案test

musically us
challenged a goat that day
spartacus was his name
ba ba ba blacksheep
  • grep -oic "[\s]*" test
  • grep -oic "[ ]*" test
  • grep -oic "[\t]*" test
  • grep -oic "[\n]*" test

所有给我4,当我期待11

grep --version - > grep (BSD grep) 2.5.1-FreeBSD

在OSX Sierra 10.12上运行此功能

重复空格不应算作一个空格。

4 个答案:

答案 0 :(得分:3)

如果你对这个技巧和替代方案持开放态度,你可能会喜欢这个:

$ awk '{print --NF}' <(tr -d '\n' <file)
11

以上解决方案将计算单词之间的“空白”。因此,'fifteen--> <--spaces' awk的字符串将测量为1,如grep。

如果您需要计算实际的单个空格,可以使用它:

$ awk -F"[ ]" '{print --NF}' <<<"fifteen-->               <--spaces"
15
$ awk -F"[ ]" '{print --NF}' <<<"  2  4  6  8  10"
10
$ awk -F"[ ]" '{print --NF}' <(tr -d '\n' <file)
11

向前迈出一步,计算单个空格和标签:

$ awk -F"[ ]|\t" '{print --NF}' <(echo -e "  2  4  6  8  10\t12  14")
13

答案 1 :(得分:2)

tr通常更适合这种情况(在大多数情况下):

tr -d -C ' ' <file | wc -c

grep解决方案依赖于grep -o的输出是换行符分隔的事实 - 例如在可能存在多个空格的以下类型的情况下,它将失败:

v='fifteen-->               <--spaces'

echo "$v" | grep -o -E ' +' | wc -l

echo "$v" | tr -d -C ' ' | wc -c

grep仅在 15 时返回1。

编辑:如果您想计算多个字符(例如 TAB SPACE ),您可以使用:

tr -dC $'[ \t]' <<< $'one \t' | wc -c

答案 2 :(得分:0)

-c选项计算匹配的行数,而不是单个匹配。使用grep -o然后管道到wc -l,这将计算行数。

grep -o ' ' test | wc -l

答案 3 :(得分:0)

只需使用awk:

$ awk -v RS=' ' 'END{print NR-1}' file
11

或者如果你想优雅地处理空文件:

$ awk -v RS=' ' 'END{print NR - (NR?1:0)}' /dev/null
0