为什么 `wc -c` 总是多 1 个字符?

lin*_*nux 9 command-line-interface

tmp我输入一个字符,但wc -c显示2,为什么?

Eme*_*ldo 16

一种方法是tr删除换行符,然后您可以计算字符。

标准行为:

echo HELLO | wc -m
# result: 6
echo -n HELLO | wc -m
# result: 5
Run Code Online (Sandbox Code Playgroud)

显示找到的换行符数:

echo HELLO | wc -l
# result: 1
echo -n HELLO | wc -l
# result: 0
Run Code Online (Sandbox Code Playgroud)

去除换行符并计算字符数:

echo HELLO | tr -d '\n' | wc -m
# result: 5
Run Code Online (Sandbox Code Playgroud)

去除换行符(和可能的返回\r)并计算输入文件的字符数:

tr -d '\n\r' < input.txt | wc -m
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 13

因为换行符也是字符。告诉您的文本编辑器不要在文件末尾添加一个。不,我不知道怎么做。

  • 作为一种解决方法,您可以使用 `wc -l` 计算换行符,并从 `wc -c` 的计数中减去它们。如果您直接从管道/重定向输出进行计数,请考虑使用 [tee](http://linux.die.net/man/1/tee) 进行拆分。 (2认同)