grep für Zeichenfolge, der keine andere Zeichenfolge vorangestellt ist

10

Ist es möglich, mit grep nach Instanzen von zu suchen, aber Instanzen von John Smithauszuschließen Mr John Smith?

Sam Hastings
quelle

Antworten:

9

Dies könnte mit einem regulären Ausdruck mit negativem Lookbehind gelöst werden (was experimentell unterstützt wird, grepwie aus dem Kommentar von arrang hervorgeht):

$ grep -P '(?<!Mr )John Smith' file

Da die Unterstützung nur experimentell ist, möchten Sie möglicherweise perlstattdessen Folgendes verwenden :

$ perl -nle 'print if /(?<!Mr )John Smith/' file
jcollado
quelle
Es wird experimentell in grep unterstützt : echo $string | grep -P '(?<!Mr )John Smith'.
arrangieren Sie den
@arrange In der Tat. Danke, ich werde die Antwort aktualisieren.
JCollado
6

Sie können ausführen

command | grep 'John Smith' | grep -v 'Mr John Smith'
Enzotib
quelle
1
Gute Idee, wird aber nicht funktionieren, wenn die Leitung hatJohn Smith Mr John Smith John Smith
Ron
1

Verwenden Sie ^ und $, um reguläre Ausdrücke zu verwenden

grep "^John Smith$"

^ ist Übereinstimmung von Anfang an $ ist Übereinstimmung von Ende.

Die Syntax hängt davon ab, wonach Sie in welcher Datei suchen.

Sie können reguläre Ausdrücke mit sed, grep, awk ... verwenden.

Beispiel

bodhi@Ubuntu:~ cat file
Mr John Smith
John Smith
John
Smith

bodhi@Ubuntu:~ grep "^John Smith$" file
John Smith
Panther
quelle
Das OP fordert nicht, dass die Zeichenfolge das einzige in seiner Zeile ist.
Enzotib