Shell-Script
按顏色屬性對 css 文件進行排序
我想建構按顏色對 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/^[^;]*;//'