Uma maneira seria substituir um caractere que não aparece em seus dados, mas classifica após os colchetes (em algum local).
sed 's/-/|/g' inputfile | LC_ALL=C sort | sed 's/|/-/g' > outputfile
Esta obviamente não é uma solução ideal.
Eu tenho um arquivo de texto contendo um registro por linha que eu gostaria de ordenar alfabeticamente, exceto que eu quero '-' para classificar depois de '[' e ']'. (A ordem de classificação natural tem '-' antes dos colchetes.) Existe uma maneira de modificar o agrupamento que o sort (1) usa para conseguir isso?
Você provavelmente desejará aplicar uma das soluções alternativas sugeridas, mas a resposta à sua pergunta não é fácil (t). Se você quiser alterar o sort
, e nenhuma das ordens de classificação especiais oferecidas pelas opções de linha de comando combina com você, será necessário definir sua própria localidade. Veja localedef
.
Você poderia fazer isso com perl:
perl -e 'print sort { (($a =~ /^-/ && $b =~ /^[\[\]]/) || ($a =~ /^[\[\]]/ && $b =~ /^-/)) ? ($b cmp $a) : ($a cmp $b) } (<>)' <filename>