¿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
grep
s finales , y el resultado dealias grep
ytype 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 lagrep
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[
, un1
, un rojom
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:
donde
␛[31m
hace que el texto sea rojo y␛[22m
lo vuelve a poner en blanco, ambos insertadosgrep
alrededor de losm
caracteres 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
grep
engrep --color=always
y 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
grep
sin su alias por el momento: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 :
Otra opción más es agregar una tubería extraña al final:
Debido a que el resultado final
grep
no es directamente al TTY, sino acat
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: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).fuente
GREP_COLOR
o deGREP_COLORS
entorno que contiene secuencias de escape SGR completas, en lugar de solo los números.--color=no
al grep final (o aplicarloTERM=dumb
)