Une approche Perl:
$ perl -F"" -a00ne 'for (@F){$i++ if /{/; $i||print; $i-- if /}/}' file
This is
that wants
anyway
Explication
-a
: active le fractionnement automatique sur le délimiteur de fichier donné par -F
dans le @F
tableau.
-F""
: définit le séparateur de champ de saisie sur vide, ce qui fera que chaque élément @F
sera l'un des caractères d'entrée.
-00
: activer le "mode paragraphe", où une "ligne" est définie comme deux caractères de nouvelle ligne consécutifs. Cela signifie que le fichier entier dans ce cas sera traité comme une seule ligne. Si votre fichier peut contenir plusieurs paragraphes et que les crochets peuvent s'étendre sur plusieurs paragraphes, utilisez -0777
plutôt.
-ne
: lire un fichier d'entrée et appliquer le script donné par -e
à chaque ligne.
Le script lui-même est en fait assez simple. Un compteur est incrémenté de un à chaque fois que a {
est vu et décrémenté de un pour chaque }
. Cela signifie que lorsque le compteur est à 0, nous ne sommes pas entre crochets et devons imprimer:
for (@F){}
: faites cela pour chaque élément de @F
, chaque caractère de la ligne.
$i++ if /{/;
: incrémenter $i
de un si ce caractère est un{
$i||print;
: imprimer sauf si $i
est défini (0 compte comme non défini).
$i-- if /}/
: décrémente $i
de un si ce caractère est un}