grep para una cadena no precedida por otra cadena

10

¿Es posible, utilizando grep, buscar instancias John Smithpero excluir instancias de Mr John Smith?

Sam Hastings
fuente

Respuestas:

9

Esto podría resolverse utilizando una expresión regular con mirada hacia atrás negativa (que se admite experimentalmente grepcomo se señala en el comentario del arreglo):

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

Dado que el soporte es solo experimental, es posible que desee utilizar perlen su lugar:

$ perl -nle 'print if /(?<!Mr )John Smith/' file
jcollado
fuente
Se apoya de forma experimental en grep : echo $string | grep -P '(?<!Mr )John Smith'.
organizar el
@arrange De hecho. Gracias, actualizaré la respuesta.
jcollado 12/12/11
6

Puedes ejecutar

command | grep 'John Smith' | grep -v 'Mr John Smith'
enzotib
fuente
1
Buena idea, pero no funcionará si la línea tieneJohn Smith Mr John Smith John Smith
Ron
1

Para usar expresiones regulares, use ^ y $

grep "^John Smith$"

^ es coincidencia desde el principio $ es coincidencia desde el final.

La sintaxis variará según lo que esté buscando en qué archivo.

Puede usar expresiones regulares con sed, grep, awk ...

Ejemplo

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

bodhi@Ubuntu:~ grep "^John Smith$" file
John Smith
Pantera
fuente
El OP no pide que la cadena sea lo único en su línea.
enzotib