(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.