我需要訂購這些檔案名(我無法更改它們):
- file_31_stable.sql
- file_32_stable.sql
- file_310_stable.sql
- file_41_stable.sql
- file_42_stable.sql
- file_410_stable.sql
這也是我想要顯示它們的預期順序,因為我必須得到最后一個。
當我使用命令時
find ./databases/ -iname file_*.sql | sort -V
輸出是這樣的:
file_31_stable.sql
file_32_stable.sql
file_41_stable.sql
file_42_stable.sql
file_310_stable.sql
file_410_stable.sql
有一個表格可以使用檔案的第一個數字然后其余的數字進行訂購,或者有一個命令可以顯示預期的順序?
uj5u.com熱心網友回復:
沒有任何分隔符,版本 310 顯然比版本 41 新。
如果您可以設計一種自動添加分隔符的方法,當然可以這樣做。也許
find ./databases/ -iname 'file_*.sql' |
sed 's/^\([^_]*_\)\([0-9]\)\([0-9]*\)/\2.\3\t\1\2\3/' |
sort -k1 -V |
cut -f2-
如果您知道主要版本必須始終是一位數;但顯然,在一般情況下,不能做出這樣的假設。
這會在實際值之前添加一列,對其進行排序,然后剝離添加的列;另見施瓦茲變換。在 之前cut,從的輸出sort看起來像
3.1 file_31_stable.sql
3.2 file_32_stable.sql
3.10 file_310_stable.sql
4.1 file_41_stable.sql
4.2 file_42_stable.sql
4.10 file_410_stable.sql
如果您sed無法識別\t為制表符,不妨嘗試放置一個文字制表符(我不能在這里這樣做,因為 Stack Overflow 將制表符呈現為空格)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/333606.html
下一篇:在欄位值前添加字母
