grep para um código de escape ANSI

1

Eu verifiquei vários links sobre como grep caracteres de escape individuais ou sequências literais, mas simplesmente não consigo combiná-los para encontrar a seqüência de escape ANSI de fundo vermelho ^[41m , mesmo digitando a ^[ como ambos Ctrl + V + Ctrl + [ e os dois caracteres literais ^ + [ e usando os dois -E e -F flags.

Os bytes brutos que estou tentando encontrar, fornecidos por hexdump , são:

1b 5b 33 37 6d 1b 5b 34 31 6d 30 2e 30 30 25

Onde isso corresponde a WHITE FOREGROUND RED BACKGROUND 0.00% . Estou produzindo esses códigos com o pacote colorama do Python e Fore.WHITE+Back.RED , caso alguém esteja curioso.

Então, qual é o segredo que estou perdendo?

    
por Ken Y-N 21.11.2016 / 07:49

1 resposta

3

but I just cannot get them to combine to find the background-red ANSI escape sequence ^[41m

Se você usar vim para abrir este arquivo, saberá que não é ^ [41m , em vez disso é ^ [[41m , que ^ [ navegue pela tecla de seta como um conjunto:

1béEscaperepresentapelocaracteredeescapeúnico^[quepodeserchamadoporCtrl+VseguidoporEsc.^[temdoiscaracteres,masnãoéúnico:

xb@dnxb:~/Downloads/grep$ascii1bASCII1/11isdecimal027,hex1b,octal033,bits00011011:called^[,ESCOfficialname:Escapexb@dnxb:~/Downloads/grep$

Façaisto(UseCtrl+VseguidoporEscparacriar^[,depoisdigitecontinuamente\[41m):

xb@dnxb:~/Downloads/grep$hexdump-C/tmp/2000000001b5b33376d1b5b34316d302e3030250a|.[37m.[41m0.00%.|00000010xb@dnxb:~/Downloads/grep$\grep'^[\[41m'/tmp/20.00%xb@dnxb:~/Downloads/grep$\grep'^[\[41m'/tmp/2|hexdump-C000000001b5b33376d1b5b34316d302e3030250a|.[37m.[41m0.00%.|00000010xb@dnxb:~/Downloads/grep$

Garantaquevocêescapedogreppeloprefixo\paraevitarseuapelido--coloraffect:

[Alternativa]:

  1. \grep -P '\e\[41m' (Crédito: comentário do OP)
  2. \grep '^[\[41m' , que usa Ctrl + V seguido por Ctrl + [ para criar ^[ . Útil quando backspace no meu teclado não é 0x08, mas eu posso usar Ctrl + V seguido por Ctrl + H (^ H obter de ascii 08 ) para produzi-lo.
por 21.11.2016 / 10:11