2017-04-06 2 views
0

Haben keine kurze Erklärung gefunden.Spezifische Linien auf konstanter Basis markieren

Ich habe die Ausgabe im Terminal:

[2017-04-06 21:12:28,946] [DEBUG] utils.py:106 [farm.utils] - Collection 
[2017-04-06 21:12:28,946] [DEBUG] utils.py:108 [farm.utils] - Inserting content to collection 
[2017-04-06 21:11:29,699] [ERROR] utils.py:117 [farm.utils] - Unexpected error during insertion. 

Und ich möchte Reihe markieren mit ERROR jedes Mal, es erscheint.

Wie kann ich das tun?

Antwort

0

Sie können über die Pipeline Dateien durch diesen Befehl ein:

sed '/ERROR/s/\(.*\)/'"$(tput setaf 1)"'\1'"$(tput sgr0)"'/' infile 

Für jede Zeile mit ERROR, bringt es die Ausgabe von

tput setaf 1 

(Terminal Escape-Code für, in der Regel, "rot") am Anfang der Zeile und der Ausgabe von

tput sgr0 

(Farb-Escape zurücksetzen) bei th Das Ende der Linie.

Diese sehen in etwa wie folgt aus:

[[31m[2017-04-06 21:11:29,699] [ERROR] utils.py:117 [farm.utils] - Unexpected error during insertion.^[(B^[[m 

und interpretiert werden, hoffentlich, wie

enter image description here

Beachten Sie, dass Ihr Pager konfiguriert werden könnte haben Escape-Sequenzen richtig zu interpretieren; Für less benötigen Sie beispielsweise die Option -R.

+0

Sprechen Sie über das Piping .bash_profile? Es wirft Fehler: 'sed: infile: Keine solche Datei oder Verzeichnis' – Snobby

+0

@Snobby Ah, sorry,' infile 'ist nur der Name, den ich für die Eingabedatei verwendet habe. Sie müssen stattdessen den Namen Ihrer Logdatei verwenden, oder wenn Sie den Befehl in einer Pipe verwenden möchten, müssen Sie ihn vollständig überspringen: 'command_that_produces_log | sed '/ ERROR/...' ' –

+0

Ehrmm, das ist nicht genau das Richtige. Ich frage mich, ob ich es einmal definieren kann und so alle weiteren Ausgaben hervorgehoben werden. In Ihrem Beispiel muss ich 'command_that_produces_log | eingeben sed '/ ERROR/...' 'jedes mal brauche ich diese Hervorhebung, die nicht so interessant ist. – Snobby