Pendekatan Perl:
$ perl -F"" -a00ne 'for (@F){$i++ if /{/; $i||print; $i-- if /}/}' file
This is
that wants
anyway
Penjelasan
-a
: mengaktifkan pemisahan otomatis pada pembatas file yang diberikan oleh -F
ke dalam @F
array.
-F""
: mengatur pemisah bidang input menjadi kosong yang akan menghasilkan setiap elemen @F
menjadi salah satu karakter input.
-00
: nyalakan "mode paragraf", di mana "baris" didefinisikan sebagai dua karakter baris baru berturut-turut. Ini berarti bahwa seluruh file dalam kasus ini akan diperlakukan sebagai satu baris. Jika file Anda dapat memiliki banyak paragraf dan tanda kurung dapat menjangkau beberapa paragraf, gunakan -0777
saja.
-ne
: baca file input dan terapkan skrip yang diberikan oleh -e
untuk setiap baris.
Script itu sendiri sebenarnya cukup sederhana. Penghitung bertambah satu oleh setiap kali {
dilihat dan dikurangi oleh satu untuk setiap }
. Ini berarti bahwa ketika penghitung adalah 0, kita tidak berada di dalam tanda kurung dan harus mencetak:
for (@F){}
: lakukan ini untuk setiap elemen @F
, setiap karakter di baris.
$i++ if /{/;
: increment $i
by one jika karakter ini adalah a{
$i||print;
: cetak kecuali $i
diatur (0 dianggap tidak disetel).
$i-- if /}/
: decrement $i
by one jika karakter ini adalah a}