当我在OSX终端中运行单词count命令时,如wc -c file.txt
,我得到以下答案,其中包括在答案前填充的空格。有谁知道为什么会这样,或者我怎么能阻止它?
18000 file.txt
我希望得到:
18000 file.txt
使用bash或bourne shell会发生这种情况。
答案 0 :(得分:2)
wc
的POSIX标准可能会被读取为暗示没有前导空格,但没有说显式。标准就是这样。
这就是所说的:
默认情况下,标准输出应包含以下格式的每个输入文件的条目:
"%d %d %d %s\n", <newlines>, <words>, <bytes>, <file>
并未提及单列选项的格式,例如-c
。
快速检查显示AIX,OSX,Solaris使用指定值的位数的格式 - 对齐列(并且位数不同)。 HPUX和Linux没有。
所以这只是一个实现细节。
答案 1 :(得分:1)
我认为这是一种很好地排列输出的方法,据我所知,没有选择wc可以调整输出格式。
例如,你可以通过管道sed 's/^ *//'
轻松摆脱它们。
可能有一个更简单的解决方案,取决于你想要摆脱它们的原因。
答案 2 :(得分:1)
至少在macOS / bash wc
下表现出输出尾随位置TAB的行为。
可以使用expr避免它:
echo -n "some words" | expr $(wc -c)
>> 10
echo -n "some words" | expr $(wc -w)
>> 2
注意:-n
防止回显换行符,该换行符在wc -c
中为1
答案 3 :(得分:0)
每次我编写一个计算行或字符的脚本时,这都会让我感到困惑。我希望wc
被定义为不会释放额外的空格,但它不是,所以我们会坚持使用它们。
当我编写脚本时,而不是
nlines=`wc -l $file`
我总是说
nlines=`wc -l < $file`
以便wc
的输出不包含文件名,但这对额外的空格没有帮助。我接下来使用的技巧是在数字上加0,如下所示:
nlines=`expr $nlines + 0` # get rid of trailing spaces