簡體   English   中英

ls -l->按正則表達式對文件排序

[英]ls -l -> Sort files by regex

我有一個目錄,其中包含來自不同應用程序的日志文件,它們的名稱如下:

A_B_C.log.20180205125615.bin
A_B_C.log.20180205125616
A_B_C_20180205133700.log
A_B_C_1234_20180205133700.log
D_E_F_G.log.20180205125715.bin
D_E_F_G.log.20180205125716
D_E_F_G_20180205133800.log
D_E_F_G_1234_20180205133800.log

名稱都包含14位數字的時間戳(年,月,日,時間)。

我想通過“ ls -l”打印所有文件名,並按名稱中的時間戳進行排序。

新文件(最高編號)應在最后打印。 如果一個時間戳有多個匹配項,則這些文件應按字母順序排序。

如何將“ ls -l”與正則表達式排序結合使用?

Perl解決方案:

perl -le 'print for sort { ($a =~ /\d{14}/g)[0] cmp ($b =~ /\d{14}/g)[0]
                           or $a cmp $b } glob "*log*"'

有關如何在Perl中提供自定義比較器的詳細信息,請參見sort

  • -l將最終換行符添加到打印行
  • \\d{14}匹配14位數字
  • /g修飾符匹配將在列表上下文中返回匹配的子字符串, [0]選擇它們中的第一個。

這行與gnu sed應該會幫助:

ls -1|sed -r 's/.*([0-9]{14}).*/\1 &/' f|sort -n|sed 's/^[0-9]* //' 

Ls不能自己做。 這個想法是:取出時間戳,以每行的開頭作為鍵,然后按時間戳排序,最后刪除插入的時間戳。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM