如何在命令行中使用带有 cut 的正则表达式?

sim*_*ple 7 cut centos sed

我有一些这样的输出ls -alth

drwxr-xr-x    5 root    admin   170B Aug  3  2016 ..
drwxr-xr-x    5 root    admin    70B Aug  3  2016 ..
drwxr-xr-x    5 root    admin     3B Aug  3  2016 ..
drwxr-xr-x    5 root    admin     9M Aug  3  2016 ..
Run Code Online (Sandbox Code Playgroud)

现在,我想解析出170B部分,这显然是人类可读格式的大小。我想使用cutor来做到这一点sed,因为我不想使用比必要更复杂/难以使用的工具。

理想情况下,我希望它足够健壮,可以处理大小附带的B,MK后缀,并相应地乘以1,10000001000相应地。不过,我还没有找到一个好的方法来做到这一点。

我已经尝试了一些事情,但并不知道最好的方法:

ls -alth | cut -f 5 -d \s+
Run Code Online (Sandbox Code Playgroud)

我希望这会奏效,因为我可以在一个或多个空格上分隔它。

但这不起作用。如何提供cut正则表达式分隔符?或者有没有更简单的方法来只提取文件的大小ls -alth

我正在使用 CentOS6.4

mkl*_*nt0 6

该答案解决了所问的问题,但将George Vasiliou 的有用find解决方案视为潜在的优越替代方案。

  • cut仅支持单个文字字符作为分隔符 ( -d),因此它不是正确的使用工具。

  • 对于提取每行不同数量的空格分隔的标记(字段)awk是最好的工具,因此George Vasiliou提出的解决方案是最简单的:
    ls -alth | awk '{print $5}'
    提取第 5 个空格分隔的字段 ( $5),即大小。

  • 与其-h先使用,然后再将人类可读的后缀(例如B, M, 和G)重新转换回纯字节数(顺便说一句,乘数必须是1024, not 的倍数1000),只需-hls输出原始字节数的命令中省略默认情况下:
    ls -alt | awk '{print $5}'