WC on OSX - Return 包含空格

WC on OSX - Return includes spaces

当我在 OSX 终端中 运行 字数统计命令时 wc -c file.txt 我得到以下答案,其中包括在答案前填充的空格。有谁知道为什么会发生这种情况,或者我该如何预防?

    18000 file.txt

我希望得到:

18000 file.txt

这发生在使用 bash 或 bourne shell 时。

我想这是一种让输出很好地排列的方法,据我所知,没有 wc 选项可以微调输出格式。

例如,您可以通过管道 sed 's/^ *//' 轻松摆脱它们。

可能有更简单的解决方案,具体取决于您想要摆脱它们的原因。

wc 的 POSIX 标准可能被解读为 暗示 没有前导空格,但没有说 明确地。标准就是这样。

这是所说的

By default, the standard output shall contain an entry for each input file of the form:

"%d %d %d %s\n", <newlines>, <words>, <bytes>, <file>

并且没有提到单列选项的格式,例如-c

快速检查显示 AIX、OSX、Solaris 使用指定值位数的格式来对齐列(并且位数不同)。 HPUX 和 Linux 没有。

所以这只是一个实现细节。

每次我编写计算行数或字符数的脚本时,这都会让我感到困扰。我希望 wc 被定义为不发出额外的空格,但事实并非如此,所以我们坚持使用它们。

当我写脚本时,而不是

nlines=`wc -l $file`

我总是说

nlines=`wc -l < $file`

所以 wc 的输出不包括文件名,但这对额外的空格没有帮助。我接下来使用的技巧是将数字加 0,如下所示:

nlines=`expr $nlines + 0`      # get rid of trailing spaces

至少在 macOS/bash wc 下表现出输出尾随位置制表符的行为。

可以用expr来避免:

echo -n "some words" | expr $(wc -c) 
>> 10
echo -n "some words" | expr $(wc -w) 
>> 2

注意: -n 防止回显换行符,在 wc -c

中该换行符将被计为 1