Angenommen, ich habe eine Datei mit den folgenden zwei Zeilen:
2014-05-05 09:11:53 /aa/bbbb/cccccc 29899
2014-05-05 09:12:17 /aa/bbbb/cccccc?dddddddd 16767
Ich brauche nur die Zeile mit dem Muster /aa/bbbb/cccccc
, ich brauche nicht die zweite Zeile mit zusätzlichen Zeichen, dh ?dddddddd
. Jetzt, als ich es versuchte
grep '/aa/bbbb/cccccc' file
Dann werden beide Zeilen ausgewählt. Ich brauche die volle Linie, grep -o
könnte also keine Lösung sein.
Was könnte die mögliche Lösung mit grep sein, damit nur die erste Zeile basierend auf dem Suchmuster ausgewählt wird?
quelle
grep '/aa/bbbb/cccccc ' file
/aa/bbbb/cccccc
Zeichenfolge enthalten.grep -E '/aa/bbbb/cccccc(\s+|$)' file
grep -E '(^|\s)/aa/bbbb/cccccc(\s|$)' file
Am einfachsten ist es, nach dem Muster ein Leerzeichen einzufügen:
Oder, um alle Arten von Leerzeichen abzugleichen:
Oder
Oder mit einem positiven Lookahead :
Oder mit einem negativen Lookahead :
Oder Sie können das Spiel umkehren:
Oder um auch Linien abzugleichen, die nur Ihr Muster enthalten (kein nachfolgendes Leerzeichen):
Oder Sie können einfach ein kleines Skript verwenden:
In awk:
Oder wenn Sie nicht wissen, in welchem Feld sich Ihr Muster befindet
In Perl
quelle
grep -v 'c?' file
warum Sie nicht verwenden,grep -v '?' file
weil die Datei nur zwei Zeilen enthält.grep -v '?'
wäre es genug.Zur Ergänzung @AvinashRaj ‚s Antwort , können Sie auch wie dieser Befehl verwenden.
quelle