【问题标题】:Unexpected leading spaces while using wc -l command使用 wc -l 命令时出现意外的前导空格
【发布时间】:2015-08-28 07:21:21
【问题描述】:

我正在尝试执行以下命令 - 但输出中引入了一些前导空格。

ls -lrt | wc -l
     29
echo $SHELL
/bin/bash

当我在另一台机器上运行相同的命令时,输出如预期。

ls -lrt | wc -l
183
echo $SHELL
/bin/bash

前导空格导致我的 perl 验证失败

unless ( $phCountRet->{COUNT} =~ /^\d+$/ ){
...
}

我可以选择修剪前导空白然后进行验证,但这不是一个干净的解决方案。

任何关于可能导致这种情况的指针都会有很大帮助。

【问题讨论】:

  • 相关:stackoverflow.com/questions/10238363/… 其中一台机器是否运行 AIX?
  • 为什么你认为修剪空白不干净? ls | wc -l | sed -e 's/^ *//' 看起来并不比 ls -lrt | wc -l 更干净,但你可以只做 perl -E 'say length glob "*"' 的等价物,根本不用去 wc。
  • 当您使用多个文件名运行wc 时,它会对齐并右对齐数字,以便它们更易读(至少某些实现是这样)。输出是为了人类可读而不是机器可读。您只需要在输出中允许空格的变化。

标签: perl unix wc


【解决方案1】:

使用

unless ( $phCountRet->{COUNT} =~ /^\s*\d+$/ ){

这也匹配前面有空格的数字。

【讨论】:

  • 谢谢詹斯。是的,我绝对可以修改正则表达式以适应这种情况。但是,我仍然更想知道为什么要引入前导空格。
  • @Soumya Think 以获得更好的可读性。但也认为这个问题会离题。
  • 这个答案只是重复给 OP 以遵循 OP 提出的建议,并没有解决 OP 提出的问题。
【解决方案2】:

正如我在 WC on OSX - Return includes spaces 中指出的,这是一个实现细节,在 POSIX 标准中没有明确说明(因此它取决于实现者对 align 列的偏好——或者不)。

【讨论】:

    猜你喜欢
    • 2020-05-10
    • 2016-03-30
    • 2015-03-30
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多