2016-04-22 16 views
2

Ich versuche Zeilen zu drucken, die b nicht gefolgt von e in einer Datei haben. Ich habe versucht, negative Vorausschau zu verwenden, aber es funktioniert nicht.grep Zeichen nicht gefolgt von Zeichen

grep 'b(?!e)' filename 
grep '(?!e)b)' filename 
egrep 'b(?!e)' f3.txt 

Wenn ich diese Befehle ausführen, wird nichts angezeigt, kein Fehler oder irgendetwas anderes. Ich überprüfte auch die Beiträge anderer Leute, konnte sie aber nicht ausführen.

+1

'grep" b [^ e] "filename.txt' könnte es tun? Oder mit ''' auf Linux. Was ist, wenn Sie 'grep -E 'für erweiterte Regex-Unterstützung verwenden? – TessellatingHeckler

+0

Von diesem Thread http://StackOverflow.com/A/9198987 werden Lookarounds in Standard-Grep nicht unterstützt, aber in GNU Grep kann 'Grep -P 'Perl-kompatible Regexes verwenden und diese unterstützen. – TessellatingHeckler

Antwort

2

grep -E 'b([^e]|$)' filename

dass ‚b‘, gefolgt von einem Zeichen entsprechen sollte, die nicht ‚e‘ ist, oder ‚b‘ am Ende der Leitungen.

1

Wenn grep Perl reguläre Ausdrücke mit -P unterstützt, suchen Arounds Arbeit:

$ grep -P 'b(?!e)' <<< 'be'  # Gets no output 
$ grep -P 'b(?!e)' <<< 'bb' 
bb 
$ grep -P 'b(?!e)' <<< 'b' 
b 

Der einzige Unterschied zu grep -E (in diesem Fall) ist, dass Sie sich nicht kümmern der Ende- of-line-Situation (siehe pilcrow's answer).