Em uma seqüência de escape como ^[[31m
, o caractere de escape ^[
não é impresso, mas os outros caracteres [31m
são caracteres de impressão. Portanto, sort -i
não ajudará: ignora os caracteres de escape, mas ainda classifica [31mred[0m
antes de [32mgreen[0m
.
Uma maneira genérica de classificar os dados de acordo com critérios que vão além das capacidades integradas do utilitário sort
é dobrar os dados em cada linha, massageando-o de forma que a primeira cópia seja a chave de ordenação, classifique o linhas e, finalmente, tira a primeira parte. Por exemplo, supondo que os dados que você deseja classificar não contenham caracteres de tabulação:
awk '{s=$0; gsub(/3\[[ -?]*[@-~]/,"",s); print s "\t" $0}' |
sort |
awk 'BEGIN {RS="\t"} {print $2}'