GNU/Linux >> Tutoriales Linux >  >> Linux

Cadena Grep ¿Dónde la siguiente línea no contiene una cadena?

Quiero buscar todos los archivos dentro de un directorio y sus subdirectorios en busca de líneas que contengan una cadena determinada, pero quiero excluir aquellos resultados que contengan una cadena determinada diferente en la línea inmediatamente posterior.

Por ejemplo, esto:

foo1 searchString bar
foo1 excludeString bar

foo2 searchString bar
something else

foo3 searchString bar

foo3 excludeString bar

foo4 searchString bar

debería devolver esto:

foo2 searchString bar
foo3 searchString bar
foo4 searchString bar

Sé que -A imprime varias líneas, y eso -v excluye los resultados. Pero mi enfoque actual de grep -r -A 1 "searchString" | grep -v "excludeString" obviamente no puede funcionar.

¿Hay alguna manera de decirle al segundo grep que también debe eliminar la línea anterior si encuentra una coincidencia? ¿O de alguna otra manera podría lograr esto?

El rendimiento no es mi principal preocupación; Sin embargo, sería bueno que el comando fuera relativamente fácil de recordar.

Respuesta aceptada:

Puedes usar p erl c r compatibles regular e xpresiones grep :

$ pcregrep -M '(searchString.*\n)(?!.*excludeString)' file
foo2 searchString bar
foo3 searchString bar
foo4 searchString bar

Busca searchString seguido de cualquier carácter . , repetido cero o más veces * , seguido de una nueva línea \n solo si hay no (?! ) patrón .*excludeString junto a él. Opción -M está presente para hacer coincidir varias líneas.


Linux
  1. ¿Cómo unir líneas que no comienzan con "#" o ";"?

  2. ¿Por qué el archivo de traducción de Bash no contiene todos los textos de error?

  3. ¿Cómo encontrar todos los archivos que no contienen una cadena de texto?

  4. ¿Encontrar el último elemento en una línea usando Grep?

  5. ¿Por qué `exit &` no funciona?

Cómo encontrar una cadena en un archivo en Linux

vim:comando no encontrado

¿Qué hace 'bash -c'?

grep para encontrar archivos que contengan una cadena de más de x caracteres de largo?

La repetición automática no funciona

¿Cómo obtener líneas que contienen cadenas en un archivo?