Shell-Script

按顏色屬性對 css 文件進行排序

  • February 19, 2017

我想建構按顏色對 CSS 文件進行排序的腳本。例如:

.actions_menu_forgot_password_link:hover {color: #deca9b;}
.login_popup_forgot_password_link {color: #ddeffb;}
.login_popup_forgot_password_link:hover {color: #deca9b;}
.trading_data_allTrades_button {color: #ddeffb; }

預期結果:

.actions_menu_forgot_password_link:hover {color: #deca9b;}
.login_popup_forgot_password_link:hover {color: #deca9b;}
.login_popup_forgot_password_link {color: #ddeffb;}
.trading_data_allTrades_button {color: #ddeffb; }

一種可能是,您編寫這樣的 shell 腳本:

column  -s "#" -o "#" -t css.txt | sort -r -k2

這將首先對您的輸出進行列化,並對第二列中的行進行反向排序。

也許一個缺點是,它會稍微修改您的程式碼(但不是以一種糟糕的方式)並且肯定需要十六進制形式的顏色。使用像“顏色:藍色”這樣的符號是行不通的。

使用此輸入,您可以簡單地告訴 sort 從#字元處開始對行進行排序。告訴它你有#-delimited 欄位並且你想使用第二個作為排序鍵(或者等效地假設每行只有一個#,你想使用從第二個開始的所有欄位作為排序鍵)。

sort -t '#' -k 2

如果多個屬性具有相同的顏色,請添加選項-s以保留具有相同顏色的屬性之間的原始順序。或者,傳遞-k 1,1 after -k 2以使用屬性名稱作為輔助排序鍵(請注意,任何縮進也包含在此輔助排序鍵中)。

這對於您的案例應該已經足夠了。如果您的實際案例更複雜,您可能需要在對輸入進行排序之前對其進行按摩。用來sort對數據中排序鍵不能直接辨識的數據進行排序,一般的構想是使用sed或awk等行變換工具在行首複製排序鍵,然後排序,最後剝離複製的排序鍵。這是應用於此案例的技術作為說明,在複製的排序鍵中將顏色名稱轉換為十六進制值的額外步驟(原件未更改)。

sed 's/^.*color: *\([^;]*\);/\1;&/' |
sed 's/^black;/#000000;/; s/^red;/#ff0000;/; #etc.' |
sort |
sed 's/^[^;]*;//'

引用自:https://unix.stackexchange.com/questions/346103