A captura de tela parece mostrar códigos de cores ANSI mutilados , que controlam a renderização de texto. O texto em negrito / claro é produzido com a sequência ␛[1m
, que geralmente é interpretada pelo seu terminal e não é exibida diretamente na tela: apenas torna o próximo pedaço de texto brilhante. A captura de tela da grep
saída un ped mostra a diferença de cores entre os rótulos e os valores em cada linha, para que a saída original os use.
Parece que essa sequência foi interrompida pela sua final grep
, que correspondia ao "m" no código (já que é uma letra [a-z]
) e tentou destacá-la em vermelho. Isso deixou uma sequência de escape parcial para trás, que seu terminal não conseguiu processar.
O caractere de escape ␛
é U + 001B, que é o número hexadecimal que é renderizado nas caixas de caracteres desconhecidos. O que é exibido é o escape (a caixa), a [
, a 1
, um vermelho m
seguido pelo texto correspondente esperado "eng" e o mesmo acontecendo no final com "22" (o código numérico para "cor e intensidade normais").
A saída quebrada é realmente:
␛ [1 ␛ [31m meng ␛ [22m ␛ [22 ␛ [31m m ␛ [22m
onde ␛[31m
torna o texto vermelho e ␛[22m
volta para branco, ambos inseridos ao grep
redor dos m
caracteres no texto original. O original era apenas:
␛ [1m eng ␛ [22m
que é apenas brilhante " eng
" e, em seguida, volta ao texto normal.
Você pode verificar isso alterando seu final grep
para o grep --color=always
canal hexdump
, mostrando todos os caracteres não imprimíveis e os interpretados pelo seu terminal.
Você pode lidar com isso de algumas maneiras. Uma é usar grep
sem o seu alias no momento:
./trans --id --input /path/to/txt | grep ISO | \grep [a-z]
A barra invertida ignora temporariamente o alias e é executado grep
diretamente.
Outra é retirar os códigos ANSI do comando original, para o qual existem algumas sugestões nesta pergunta :
./trans --id --input /path/to/txt | perl -pe 's/\e\[[\d;]*m//g' | grep ISO | grep [a-z]
Ainda outra opção é adicionar um tubo estranho no final:
./trans --id --input /path/to/txt | grep ISO | grep [a-z] | cat
Como a grep
saída final não é diretamente no TTY, mas cat
através de um tubo, ele não inserirá o realce colorido.
Talvez a melhor opção seja fazer com que o Translate Shell pare de usar seqüências de controle de terminal em sua própria saída em primeiro lugar, quando não estiver em um terminal. Isso envolveria adequadamente um relatório de erro de você para o (s) autor (es) e uma correção de código para a ansi()
função do Translate Shell , mas é possível contê-lo um pouco:
TERM=dumb ./trans --id --input /path/to/txt | grep ISO | grep [a-z]
Isso passa pelo dumb
tipo de terminal no ambiente do Translate Shell, que pelo menos reconhece como não tendo suporte a cores ECMA-48. (Infelizmente, o Translate Shell não usa terminfo e apenas conecta em seu próprio código os tipos de terminal que ele entende e as seqüências de controle que ele usa.)