如何设置sorting(1)使用自定义sorting规则?

我有一个文本文件,每行包含一个logging,我想按字母顺序sorting,除了我想在'['和']'之后进行sorting。 (自然sorting顺序在方括号前有' – '。)有没有办法修改sort(1)用来实现这个的sorting规则?

一种方法是replace没有出现在数据中的字符,但在括号(在某些语言环境)之后进行sorting。

sed 's/-/|/g' inputfile | LC_ALL=C sort | sed 's/|/-/g' > outputfile 

这显然不是一个理想的解决scheme。

您可能会想要应用其中一个build议的解决方法,但您的问题的答案是(不容易)。 如果您想要更改sort ,而且命令行选项提供的特殊sorting顺序不适合您,则需要定义自己的区域设置。 请参阅localedef

你可以用perl来做:

 perl -e 'print sort { (($a =~ /^-/ && $b =~ /^[\[\]]/) || ($a =~ /^[\[\]]/ && $b =~ /^-/)) ? ($b cmp $a) : ($a cmp $b) } (<>)' <filename>