Ändern Sie das Terminal STDOUT / STDERR, um die Linienfarbe basierend auf einem REGEX zu ändern

395
igniteflow

Ist das möglich? Was ich erreichen möchte, ist, wenn Sie Unit-Tests (Python) ausführen, um jede Zeile hervorzuheben, die dem Pfad zum aktuellen Projektverzeichnis entspricht, und andere Ausgaben unberührt zu lassen. Im Allgemeinen ist dies die Zeile, nach der ich suche, also wäre dies für Debugging-Zwecke sehr nützlich. Der Pattern-Matching-Teil sollte in Ordnung sein, ich weiß einfach nicht, wie ich die Ausgabe ändern soll (Tests werden mit Nose ausgeführt)

0

1 Antwort auf die Frage

1
user49740

Sie könnten Ihren Befehl durchleiten grep -C10000 -P --color pattern(oder in Ihrem speziellen Fall grep -C10000 -P --color ".*$PWD.*").

Zum Beispiel:

cat /proc/cpuinfo | grep -C10000 -P --color 'GHz|MHz' 
  • Ja, das ist eine sinnlose Verwendung von Katzen.
  • -C10000weist grep an, 10000 Kontextzeilen zu drucken. Verwenden Sie eine Zahl, die groß genug ist, damit grep alle Zeilen druckt
  • Verwenden |&Sie diese Option, wenn Sie auch STDERR erfassen möchten
Möglicherweise müssen Sie mit `" ^. * $ PWD /.*$ "` übereinstimmen, wenn Sie die gesamte Zeile markieren möchten, die das aktuelle Verzeichnis enthält. AFH vor 8 Jahren 1
Richtig, Antwort wurde aktualisiert. Keine Notwendigkeit für `^` und `$` jedoch. Ich habe auch den letzten Schrägstrich entfernt. user49740 vor 8 Jahren 0
Sie können auch `egrep --color" $ | ^. * $ PWD /.*$ "` verwenden, um alle Zeilen zu markieren, um die Verwendung von -C10000 zu vermeiden. Auf diese Weise findet `egrep` alle Zeilen und markiert gefundene Treffer. Da ein EOL ($) jedoch nicht "sichtbar" ist, wird nur das tatsächliche Suchmuster farbig dargestellt. Lambert vor 8 Jahren 2