Como parar a correspondência do grep em seqüências de escape de terminal (ou colorir em várias cores)?

0

Eu escrevi um monte de scripts para colorir correspondências, assim:

$ echo abcdef | grepg c
ab[green]c[/green]def
$ echo abcdef | grepr e
abcd[red]e[/red]f

Também funciona quando eu encadeio:

$ echo abcef | grepr a | grepg b | grepg c | grepp e | grepl f
abcdef   [each letter have it's own style]

Quanto mais eu tento isso para dígitos, o resultado está errado:

$ echo 12345 | grepr 1 | grepg 2 | grepb 3 | grepp 4 | grepl 5
[01;[01;3[01;35m4m31m1[01;[01;3[01;35m4m32m2[01;3[01;35m4m3[01;35m45

porque se os greps subsequentes também corresponderem dentro das sequências de escape produzidas pelos greps anteriores.

Como fazer isso certo? Eu preciso parar o grep matching dentro de seqüências terminais de escala ou fazê-lo corresponder a mais de um padrão e colori-los para cores diferentes.

    
por Vi. 31.01.2013 / 16:37

1 resposta

0

Dê uma olhada em lookkbehind e dê uma olhada nas regexes.

Algo como

(?<!\[\d\d;\d\d?m)yourregexhere

poderia funcionar (não tenho certeza sobre o formato das seqüências de cores)

    
por 31.01.2013 / 16:49