Un enfoque de Perl:
$ perl -F"" -a00ne 'for (@F){$i++ if /{/; $i||print; $i-- if /}/}' file
This is
that wants
anyway
Explicación
-a
: activa la división automática en el delimitador de archivo dado por -F
en la @F
matriz.
-F""
: establece el separador de campo de entrada en vacío, lo que dará como resultado que cada elemento @F
sea uno de los caracteres de entrada.
-00
: active el "modo párrafo", donde una "línea" se define como dos caracteres de línea nueva consecutivos. Esto significa que el archivo completo en este caso se tratará como una sola línea. Si su archivo puede tener muchos párrafos y los corchetes pueden abarcar varios párrafos, use -0777
en su lugar.
-ne
: lee un archivo de entrada y aplica el script dado por -e
a cada línea.
El guión en sí es realmente bastante simple. Un contador se incrementa en uno cada vez que {
se ve un y decrementa en uno por cada }
. Esto significa que cuando el contador es 0, no estamos entre corchetes y deberíamos imprimir:
for (@F){}
: haga esto para cada elemento de @F
cada carácter en la línea.
$i++ if /{/;
: incremento $i
en uno si este personaje es un{
$i||print;
: imprimir a menos que $i
esté configurado (0 cuenta como no establecido).
$i-- if /}/
: decremento $i
por uno si este personaje es un}