代码之家  ›  专栏  ›  技术社区  ›  jsx97

ls仅显示修改的日期、修改的时间和名称

  •  0
  • jsx97  · 技术社区  · 1 年前

    我试图从的输出中删除所有列 ls -l 命令,但不包括修改日期、修改时间和名称。

    drwxr-xr-x  5 john  staff     160 May 16 01:59 some-folder
    -rw-r--r--@ 1 john  staff  759704 Apr 14 04:05 some-file.png
    

    下面的命令几乎就是我想要的,只是它留下了第二列,其中有整数5和1。

    ls -goh | sed -re 's/^[^ ]* //'
    

    我已经试着自己解决了,这是其中一个尝试,

    ls -goh | sed -re 's/^[^ ]* *\d* //'
    

    但看起来 sed 正则表达式与我以前一直使用的有些不同。

    我需要如何更改regex以仅显示日期修改、时间修改和名称列?

    --

    查看评论,当前 awk 输出

    28M Mar 29 12:03 foo.dmg
    96B Feb 9 15:33 bar.app
    128B May 16 01:59 aaa
    160B May 16 01:59 bbb
    

    最好保留列:

     28M Mar 29 12:03 foo.dmg
     96B Feb  9 15:33 bar.app
    128B May 16 01:59 aaa
    160B May 16 01:59 bbb
    
    2 回复  |  直到 1 年前
        1
  •  1
  •   Grismar    1 年前

    这是一个 awk 命令,确保所有文件实际上都有完整的日期和时间信息,并更好地处理其中有空格的文件名:

    ls -goh --time-style=long-iso | awk '{filename = ""; for (i=6; i<=NF; i++) filename=filename $i " "; printf "%-10s %-5s %s\n", $4, $5, filename}'
    
        2
  •  0
  •   jsx97    1 年前

    这是一个 sed 解决方案

    ls -goh | sed -re 's/^[^ ]* * [0-9]+ //'
    

    事实证明 sed 两者都不支持 \d (所以你需要使用 [[:digit:]] [0-9] 也没有 \s (所以你需要使用 [[:space:]] 或文字空间)。在Linux上,由于安装了GNU核心实用程序,它的工作方式可能会有所不同。

    相关的 https://superuser.com/q/112834/how-to-match-whitespace-in-sed