GNU/Linux >> Tutoriales Linux >  >> Linux

¿Coincidencia de patrones multilínea usando Sed, Awk o Grep?

Esta pregunta ya tiene respuestas aquí :¿Cómo puedo "grep" patrones en varias líneas?

(9 respuestas)
Cerrado hace 2 años.

¿Es posible hacer una coincidencia de patrón multilínea usando sed? , awk o grep ? Tomemos, por ejemplo, me gustaría obtener todas las líneas entre { y }

Entonces debería poder coincidir

 1. {}
 2. {.....}
 3. {.....
.....}

Inicialmente la pregunta usaba <p> como ejemplo. Edité la pregunta para usar { y } .

Respuesta aceptada:

Si bien estoy de acuerdo con el consejo anterior, querrá obtener un analizador para cualquier cosa que no sea pequeña o completamente ad-hoc, es (apenas 😉 posible hacer coincidir bloques de varias líneas entre llaves con sed.

Aquí hay una versión de depuración del código sed

sed -n '/[{]/,/[}]/{
    p
    /[}]/a
     end of block matching brace

    }' *.txt

Algunas notas,

  • -n significa 'sin líneas de impresión predeterminadas como procesadas'.
  • 'p' significa ahora imprime la línea.
  • La construcción /[{]/,/[}]/ es una expresión de rango. Significa escanear hasta encontrar algo que coincida con el primer patrón (/[{]/) Y luego escanea hasta que encuentres el segundo patrón (/[}]/) LUEGO realice cualquier acción que encuentre entre { } en el código sed. En este caso ‘p’ y el código de depuración. (no se explica aquí, utilícelo, modifíquelo o elimínelo según le convenga).

Puede eliminar el final de la depuración de bloques /[}]/a cuando demuestre a su satisfacción que el código realmente coincide con los bloques delimitados por {,}.

Esta muestra de código omitirá todo lo que no esté dentro de un par de llaves.
Como lo señalaron otros anteriormente, se confundirá fácilmente si tiene {,} adicionales incrustados en cadenas, expresiones regulares, etc., O donde la llave de cierre es la misma línea , (con agradecimiento a fred.bear)

Espero que esto ayude.


Linux
  1. Sed:¿Imprimir solo la primera aparición de una coincidencia de patrón?

  2. Usando grep para buscar en reversa

  3. ¿Cómo puedo buscar un patrón de varias líneas en un archivo?

  4. Escribir en mayúsculas la primera letra de las palabras usando SED

  5. ¿Cuáles son las diferencias entre grep, awk y sed?

Cómo realizar una búsqueda de patrones en archivos usando Grep

Cómo eliminar líneas vacías en archivos usando Grep, Sed y Awk

Usando grep y sed para encontrar y reemplazar una cadena

Mostrar coincidencia encontrada o no usando awk

Usando grep vs awk

Usar sed para reemplazar entre un patrón específico