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 grep
salida 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 m
seguido 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 ␛[31m
hace que el texto sea rojo y ␛[22m
lo vuelve a poner en blanco, ambos insertados grep
alrededor de los m
caracteres 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 grep
en grep --color=always
y 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 grep
sin 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 grep
directamente.
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 grep
no es directamente al TTY, sino a cat
travé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 dumb
tipo 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).