Как остановить сопоставление grep в выходных последовательностях терминала (или раскрасить в несколько цветов)?

396
Vi.

Я написал несколько сценариев для раскраски совпадений, например:

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

Это также работает, когда я цепью это:

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

Но когда я пробую это для цифр, результат будет неправильным:

$ 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 

потому что, если последующие greps также совпадают внутри escape-последовательностей, созданных предыдущими greps.

Как это сделать правильно? Мне нужно либо остановить сопоставление grep внутри последовательностей эскалации терминала, либо сделать так, чтобы оно совпадало с несколькими шаблонами и раскрасить их в разные цвета.

0

1 ответ на вопрос

0
incaseoftrouble

Взгляните на взгляд назад и посмотрите в регулярные выражения.

Что-то вроде

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

может работать (я не уверен насчет формата цветных строк)