按颜色属性对 css 文件进行排序

按颜色属性对 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; }

答案1

您可能会编写这样的 shell 脚本:

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

这将首先对您的输出进行列化,并对第二列上的行进行反向排序。

也许一个缺点是,它会稍微修改您的代码(但不是很糟糕)并且肯定需要十六进制形式的颜色。使用“颜色:蓝色”这样的符号是行不通的。

答案2

通过此输入,您可以简单地告诉 sort 从字符处开始对行进行排序#。告诉它您有#- 分隔字段,并且您希望使用第二个字段作为排序键(或者等效地,假设每行只有一个字段#,您希望使用以第二个字段开头的所有字段作为排序键)。

sort -t '#' -k 2

如果多个属性具有相同的颜色,请添加选项-s以保留具有相同颜色的属性之间的原始顺序。或者,通过-k 1,1 -k 2使用属性名称作为辅助排序键(请注意,任何缩进也包含在该辅助排序键中)。

这对于您的用例来说应该足够了。如果您的实际用例更复杂,您可能需要在对输入进行排序之前对其进行处理。要用于sort对数据中无法直接识别排序键的数据进行排序,一般的想法是使用行转换工具(例如 sed 或 awk)在行的开头复制排序键,然后排序,然后最后去掉复制的排序键。以下是应用于此用例的技术作为说明,其中包括将颜色名称转换为复制的排序键中的十六进制值(原始值未更改)的额外步骤。

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

相关内容