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
当我在 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