Wie schließe ich sehr lange Zeilen von grep
den Ergebnissen aus?
Ich durchsuche oft viele .js-Dateien ( -r
) und einige davon sind kompiliert, sodass sie aus einer einzigen Zeile bestehen, die normalerweise mehrere tausend Zeichen lang ist. Bei all diesem Durcheinander fällt es mir schwer, die Ergebnisse aus den übrigen Dateien zu erkennen.
Was muss ich übergeben, grep
um Zeilen auszuschließen, die beispielsweise länger als 1000 Zeichen sind?
Ich möchte das Ergebnis nicht durch ein weiteres Grep weiterleiten müssen, da ich dadurch Farben aus der Ausgabe verlieren würde. Auch möchte ich das erste Grep am Ende der Pipe nicht erneut hinzufügen müssen, um die Farben zurückzubekommen.
Antwort1
Das Weiterleiten grep
an etwas entfernt nicht unbedingt die Farben. Dieses Verhalten resultiert aus --color=auto
(was, wenn Sie es überprüfen, alias grep
wahrscheinlich das ist, was Sie verwenden). Sie können es überschreiben und weitergeben --color=always
und grep
die Farben bleiben auch durch eine Pipe erhalten.
Was das Ausschließen der Zeilen betrifft, können Sie eine Pipe an jedes beliebige Tool Ihrer Wahl senden (z. B. cut
wie von Amazed erwähnt). Denken Sie daran, dass die Farben von grep zusätzliche Bytes in die übereinstimmenden Zeilen einfügen, falls Ihnen das wichtig ist. Es gibt (für mich jedenfalls) keine offensichtliche Möglichkeit, dies im selben grep
Aufruf zu tun.
Antwort2
Der folgende Befehl sollte das gewünschte Ergebnis erzielen, also keine übereinstimmenden Zeilen ausgeben, deren Länge größer als 1000 Zeichen ist:
grep -r --color=always $pattern . | cut -c1-1000
Das --color=always
Flag stellt sicher, dass Farb-Escape-Sequenzen von grep generiert werden.
Der Standardwert dieser Option ist --color=auto
, wodurch grep seine Ausgabe nur einfärbt, wenn es an ein interaktives Terminal übergeben wird, und keine Farben verwendet, wenn es an einen anderen Befehl weitergeleitet wird.