Ejemplo:
This is {
the multiline
text file }
that wants
{ to be
changed
} anyway.
Debe convertirse:
This is 
that wants
 anyway.
Encontré algunos hilos similares en el foro, pero no parecen funcionar con llaves de varias líneas.
Si es posible, preferiría algún método de una línea, como soluciones basadas en grep, sed, awk ... etc.
EDITAR: Las soluciones parecen estar bien, pero he notado que mis archivos originales incluyen la anidación de llaves. Entonces estoy abriendo una nueva pregunta. Gracias a todos: ¿Cómo puedo eliminar todo el texto entre llaves en un archivo de texto de varias líneas?
                    
                        text-processing
                                sed
                                awk
                                grep
                                
                    
                    
                        Sopalajo de Arrierez
fuente
                
                fuente

sed '/{/{:1;N;s/{.*}//;T1}' multiline.fileRespuestas:
Explicación:
:again;$!N;$!b again;Esto lee todo el archivo en el espacio del patrón.
:againEs una etiqueta.Nlee en la siguiente línea.$!b againvuelve a laagainetiqueta con la condición de que esta no sea la última línea.s/{[^}]*}//gEsto elimina todas las expresiones entre llaves.
En Mac OSX, intente:
Tirantes anidados
Tomemos esto como un archivo de prueba con muchas llaves anidadas:
Aquí hay una modificación para manejar llaves anidadas:
Explicación:
:again;$!N;$!b againEsto es lo mismo que antes: se lee en todo el archivo.
:bEsto define una etiqueta
b.s/{[^{}]*}//gEsto elimina el texto entre llaves siempre que el texto no contenga llaves internas.
t bSi el comando sustituto anterior resultó en un cambio, vuelva a la etiqueta
b. De esta manera, el comando sustituto se repite hasta que se eliminan todos los grupos de llaves.fuente
EDIT) no sea exactamente la misma, creo que debería responderla también. ¿Estaría bien con las reglas del foro?Perl:
Si desea editar en el lugar
Eso lee el archivo como una sola cadena y realiza una búsqueda y reemplazo global.
Esto manejará arriostrados anidados:
fuente
Sed:
comenzó desde la línea con
{y obtiene la siguiente línea (N) hasta que{}se pueda realizar la sustitución ( ) (Tsignifica volver a la marca realizada:si no se realiza la sustitución)Un poco de modificación para que sea cierto si muchas curvas se rompen en una línea
Elimine todos los símbolos entre paréntesis (
[^}]igual a cada símbolo exceptoright bracketpara quesedno sea codicioso), y si permanece en la línealeft bracked, regrese para comenzar con la siguiente línea agregada si no la hayright bracket.fuente