La captura de pantalla parece mostrar códigos de color ANSI destrozados , que controlan la representación del texto. El texto en negrita / brillante se produce con la secuencia ␛[1m, que generalmente es interpretada por su terminal y no se muestra directamente en la pantalla: solo hace que el siguiente fragmento de texto sea brillante. La captura de pantalla de la grepsalida no pedida muestra la diferencia de color entre las etiquetas y los valores en cada línea, por lo que la salida original los está utilizando.
Parece que esa secuencia se ha roto en su final grep, que coincide con la "m" en el código (ya que es una letra [a-z]) e intentó resaltarla en rojo. Eso dejó una secuencia de escape parcial, que su terminal no pudo procesar.
El carácter de escape ␛es U + 001B, que es el número hexadecimal que se representa en los cuadros de caracteres desconocidos. Lo que se muestra es el escape (el cuadro), un [, un 1, un rojo mseguido del texto correspondiente "eng", y lo mismo sucede al final con "22" (el código numérico para "color e intensidad normales").
La salida rota es realmente:
␛ [1 ␛ [31m meng ␛ [22m ␛ [22 ␛ [31m m ␛ [22m
donde ␛[31mhace que el texto sea rojo y ␛[22mlo vuelve a poner en blanco, ambos insertados grepalrededor de los mcaracteres en el texto original. El original era solo:
␛ [1m eng ␛ [22m
que es brillante " eng" y luego vuelve al texto normal.
Usted puede comprobar esto cambiando su última grepen grep --color=alwaysy tuberías en hexdump, que mostrará todos los caracteres no imprimibles y los interpretadas por el terminal.
Puedes lidiar con esto de varias maneras. Una es usar grepsin su alias por el momento:
./trans --id --input /path/to/txt | grep ISO | \grep [a-z]
La barra invertida omite temporalmente el alias y se ejecuta grepdirectamente.
Otra es quitar los códigos ANSI del comando original, para lo cual hay algunas sugerencias en esta pregunta :
./trans --id --input /path/to/txt | perl -pe 's/\e\[[\d;]*m//g' | grep ISO | grep [a-z]
Otra opción más es agregar una tubería extraña al final:
./trans --id --input /path/to/txt | grep ISO | grep [a-z] | cat
Debido a que el resultado final grepno es directamente al TTY, sino a cattravés de una tubería, no insertará el resaltado coloreado.
Quizás la mejor opción es hacer que Translate Shell deje de usar secuencias de control de terminal en su propia salida en primer lugar cuando no está en una terminal. Eso implicaría adecuadamente un informe de error de usted a su (s) autor (es) y una corrección de código para la ansi()función Traducir Shell , pero uno puede modificarlo de alguna manera:
TERM=dumb ./trans --id --input /path/to/txt | grep ISO | grep [a-z]
Esto pasa el dumbtipo de terminal en el entorno de Translate Shell, que al menos reconoce que no tiene soporte de color ECMA-48. (Lamentablemente, Translate Shell no usa terminfo, y simplemente conecta en su propio código los tipos de terminales que entiende y las secuencias de control que usa).