如何从ls -o命令的输出结果中移除前3列?
移除
ls -o输出的前3列 没错,ls本身确实没有内置选项来直接剔除输出里的指定列,不过咱们可以借助文本处理工具轻松搞定这个需求,这里推荐用awk——它能完美处理带空格的文件名(不像cut在这种场景下容易因为文件名里的空格出错)。
直接可用的命令
把ls -o的输出通过管道传给awk,让它从第4列开始打印所有内容:
ls -o | awk '{for(i=4; i<=NF; i++) printf "%s ", $i; print ""}'
命令拆解
ls -o:生成不含组信息的文件详细列表awk部分:NF代表当前行的总列数- 循环从第4列(
i=4)遍历到最后一列,逐个打印内容并添加空格分隔 print ""用来在每行结束后换行,保证每个文件的信息单独占一行
如果你介意每行末尾多出来的空格,也可以用这个正则替换的版本:
ls -o | awk '{sub(/^[^ ]+ +[^ ]+ +[^ ]+ +/, ""); print}'
它会直接把开头的前三列(包括列之间的空格)替换为空,然后打印剩下的内容,格式更干净。
效果验证
假设你的ls -o输出是:
-rw-rw-r-- 1 louise 347967 Aug 28 2017 Screenshot from 2017-08-28 09-33-01.png
-rw-rw-r-- 1 louise 377739 Aug 29 2017 Screenshot from 2017-08-29 10-39-49.png
-rw-rw-r-- 1 louise 340682 Aug 29 2017 Screenshot from 2017-08-29 10-40-02.png
执行命令后,就能得到你想要的结果:
347967 Aug 28 2017 Screenshot from 2017-08-28 09-33-01.png
377739 Aug 29 2017 Screenshot from 2017-08-29 10-39-49.png
340682 Aug 29 2017 Screenshot from 2017-08-29 10-40-02.png
内容的提问来源于stack exchange,提问作者Louise
相关产品推荐
相关产品推荐

