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

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

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

相关内容