我tmp
输入了一个字符,但wc -c
显示2
,为什么?
答案1
因为换行符也是字符。告诉你的文本编辑器不要在文件末尾添加换行符。不,我不知道怎么做。
答案2
如果提供的字符数wc -c
比预期多 +1,则其输入可能包含换行符\n
。
处理此问题的一种方法是tr
删除换行符,然后就可以计算字符数。
标准行为:
echo HELLO | wc -m
# result: 6
echo -n HELLO | wc -m
# result: 5
显示找到的换行符的数量:
echo HELLO | wc -l
# result: 1
echo -n HELLO | wc -l
# result: 0
删除换行符并计算字符数:
echo HELLO | tr -d '\n' | wc -m
# result: 5
删除换行符(以及可能的返回符\r
)并计算输入文件的字符数:
tr -d '\n\r' < input.txt | wc -m
请注意,上面的示例使用了echo
,它添加了换行符\n
。
答案3
我在计算中一直使用与 the-wabbit 类似的建议。
作为一种解决方法,您可以使用 wc -l 计算换行符,然后从 wc -c 的计数中减去它们。
function num_chars () {
# echo -e tells echo to honor certain sequences like \n
chars=$(echo -e "${1}" | wc -c)
lines=$(echo -e "${1}" | wc -l)
real_chars=$(echo "$chars - $lines" | bc)
echo "$real_chars"
}
num_chars "hello Dolly"
11 #Result
num_chars "hello
dolly"
11 #Result
num_chars "hello \nDolly"
11 #Result