¿Alguna idea de lo que podría estar causando esto? Sin usar grep, lo único que se muestra allí son los códigos ISO y el espacio vacío.
Mando: ./trans --id --input /path/to/txt | grep ISO | grep [a-z]
root@box /test # alias grep
alias grep='grep --color=auto'
root@box /test # type grep
grep is aliased to `grep --color=auto'
Salida normal:
grep
terminal
pipe
escape-characters
Freedo
fuente
fuente



greps finales , y el resultado dealias grepytype grep?Respuestas:
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 lagrepsalida 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[, un1, un rojomseguido 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:
donde
␛[31mhace que el texto sea rojo y␛[22mlo vuelve a poner en blanco, ambos insertadosgrepalrededor de losmcaracteres en el texto original. El original era solo:que es brillante "
eng" y luego vuelve al texto normal.Usted puede comprobar esto cambiando su última
grepengrep --color=alwaysy tuberías enhexdump, 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: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 :
Otra opción más es agregar una tubería extraña al final:
Debido a que el resultado final
grepno es directamente al TTY, sino acattravé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: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).fuente
GREP_COLORo deGREP_COLORSentorno que contiene secuencias de escape SGR completas, en lugar de solo los números.--color=noal grep final (o aplicarloTERM=dumb)