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

标签 sed centos cut

我从 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 ..

现在,我想解析出 170B 部分,这显然是人类可读格式的大小。我想使用 cutsed 来执行此操作,因为我不想使用比必要的更复杂/更难使用的工具。

理想情况下,我希望它足够健壮,能够处理大小附带的 BMK 后缀,并相应地相乘通过 110000001000 相应地。不过,我还没有找到这样做的好方法。

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

ls -alth | cut -f 5 -d \s+

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

但这行不通。如何为 cut 提供正则表达式分隔符?或者是否有更简单的方法从 ls -alth 中仅提取文件的大小?

我用的是CentOS6.4

最佳答案

这个答案解决了问题所问,但请考虑 George Vasiliou's helpful find solution作为潜在的优越替代品。

  • cut 只支持单个,文字字符作为分隔符(-d),所以不对要使用的工具。

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

  • 而不是先使用-h,然后重新转换人类可读的后缀(例如BMG) 回到单纯的 byte 计数(顺便说一下,乘数必须是 1024 的倍数,而不是 1000),只需从 ls 命令中省略 -h,它默认输出原始字节数:
    ls -alt | awk '{print $5}'

关于sed - 如何在命令行中使用带有 cut 的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43312360/

相关文章:

linux - 如何使用多个(嵌套)分隔符从文本中提取值

php - file_get_contents(https ://xxxxx/js/nav_index. php?lang=zn&index=1) : failed to open stream: Connection refused in common/header. php上线

postgresql - Bugzilla - 表已经存在 : bz_schema at Bugzilla/DB/Schema. pm

python - Django CentOS 7 - 无法导入名称 Col

css - 有什么方法可以用元素将背景设为 "cut"?

regex - 如何 grep/sed/awk 获取以空白字符开头的一系列输出

linux - sed 替换所选文本第 8 个位置的空格字符

unix - 为什么 sed 为波浪号报告 "Invalid command code"?

linux - 管道 tail -f 切割到 sed 不产生任何输出

linux - 使用 Linux 剪切、排序和 uniq