Wie kann der grep-Abgleich in terminalen Escape-Sequenzen angehalten werden (oder in mehrere Farben eingefärbt werden)?

463
Vi.

Ich habe eine Reihe von Skripten geschrieben, um Übereinstimmungen wie folgt zu färben:

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

Es funktioniert auch, wenn ich es kette:

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

Hovewer, wenn ich dies für Ziffern versuche, ist das Ergebnis falsch:

$ 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 

denn wenn nachfolgende Greps auch innerhalb der von früheren Greps erzeugten Escape-Sequenzen passen.

Wie mache ich es richtig? Ich muss entweder den Grep-Abgleich in terminalen Eskalationssequenzen stoppen oder es mit mehr als einem Muster abgleichen und sie in verschiedenen Farben einfärben.

0

1 Antwort auf die Frage

0
incaseoftrouble

Schauen Sie sich Lookkbehind und Lookahead in Regex an.

So etwas wie

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

könnte funktionieren (ich bin mir nicht sicher über das Format der colorisierenden Zeichenketten)