grep para una cadena no precedida por otra cadena


10

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

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

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'

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

El OP no pide que la cadena sea lo único en su línea.
enzotib
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.