Wie mache ich vertikale Balken? in grep arbeiten?


10

Hier ist ein Beispiel für eine grep-Befehlszeile, die ich ausprobiert habe:

grep '(565172|565173|565175)' /var/log/cups/error_log

Es wird keine Ausgabe erzeugt, obwohl alle drei Werte mehrmals in der Datei enthalten sind.

Ich habe versucht, den Balken zu entkommen, und das hat die Dinge etwas verbessert - der mittlere Wert wurde erkannt, aber nicht der erste oder letzte.

grep '(565172\|565173\|565175)' /var/log/cups/error_log

Ich habe auch Doppelfluchten versucht und bin wieder zu keinen Ergebnissen gekommen.

grep '(565172\\|565173\\|565175)' /var/log/cups/error_log

Was mache ich falsch? Vielen Dank.

Antworten:


14

Die Syntax, die Sie verwenden möchten, gehört zu erweiterten regulären Ausdrücken, daher ist die Antwort sehr einfach. Verwenden Sie entweder egrepdas -EFlag oder schließen Sie es ein .


17

Was Ihnen begegnet, ist der Unterschied zwischen einfachen und erweiterten regulären Ausdrücken. Aus der Handbuchseite von grep:

In regulären Grundausdrücken verlieren die Metazeichen ?, +, {, |, (Und) ihre besondere Bedeutung; Verwenden Sie stattdessen die Backslashed-Versionen \?, +, {, \ |, (und).

So können Sie einen der folgenden Schritte ausführen:

 grep '\(565172\|565173\|565175\)' /var/log/cups/error_log

oder

grep -E '(565172|565173|565175)' /var/log/cups/error_log

Das Flag -E aktiviert reguläre Ausdrücke "Erweitert". GNU grep unterstützt auch Perl-kompatible reguläre Ausdrücke.


Wurde abgelenkt, als ich meine Antwort schrieb. Scheint, dass Adam mich bis zum Anschlag geschlagen hat.
Steven D

4
Aber Sie haben der Erklärung hinzugefügt - der Grund, warum ich es nicht zum Laufen bringen konnte, ist, dass ich nur der Bar und nicht den Parens entkommen bin.
Mark Ransom

1
Ich wusste nicht, dass Sie diesen Sonderzeichen noch einmal entkommen können, um das gleiche Ergebnis zu erzielen, also +1 für Sie!
Adam Byrtek

1
Das Obige ist der zivilisierteste Austausch, den ich je in SO / SE gesehen habe.
Mike Nagetier
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.