[英]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.