Lange Zeilen aus Grep-Ergebnissen ausschließen

Lange Zeilen aus Grep-Ergebnissen ausschließen

Wie schließe ich sehr lange Zeilen von grepden 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, grepum 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 grepan etwas entfernt nicht unbedingt die Farben. Dieses Verhalten resultiert aus --color=auto(was, wenn Sie es überprüfen, alias grepwahrscheinlich das ist, was Sie verwenden). Sie können es überschreiben und weitergeben --color=alwaysund grepdie 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. cutwie 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 grepAufruf 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=alwaysFlag 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.

Quelle:https://unix.stackexchange.com/a/113507/48906

verwandte Informationen