grep per stringa non preceduta da un'altra stringa


10

È possibile, usando grep, cercare istanze di John Smithma escluderne istanze Mr John Smith?

Risposte:


9

Questo potrebbe essere risolto usando un'espressione regolare con lookbehind negativo (che è supportato sperimentalmente grepcome sottolineato dal commento di organizza):

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

Poiché il supporto è solo sperimentale, potresti voler utilizzare perlinvece:

$ perl -nle 'print if /(?<!Mr )John Smith/' file

E 'sperimentalmente supportato in grep : echo $string | grep -P '(?<!Mr )John Smith'.
organizzare il

@arrange In effetti. Grazie, aggiornerò la risposta.
jcollado,

6

Puoi eseguire

command | grep 'John Smith' | grep -v 'Mr John Smith'

1
Bella idea, ma non funzionerà se la linea haJohn Smith Mr John Smith John Smith
Ron

1

Per usare espressioni regolari, usa ^ e $

grep "^John Smith$"

^ è la corrispondenza dall'inizio $ è la corrispondenza dalla fine.

La sintassi varia in base a ciò che si sta cercando in quale file.

Puoi usare espressioni regolari con sed, grep, awk ....

Esempio

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

bodhi@Ubuntu:~ grep "^John Smith$" file
John Smith

L'OP non richiede che la stringa sia l'unica cosa sulla sua linea.
enzotib,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.