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?

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

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'

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

Das OP fordert nicht, dass die Zeichenfolge das einzige in seiner Zeile ist.
Enzotib
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.