シェルワンライナー160本ノック問題137
問題137 コードの整形
問題のファイルは
https://github.com/shellgei/shellgei160
からダウンロードできる。
sedで改行を入れるところまではできたがインデントをどう入れればいいかさっぱりだった。
解答例は
cat fib.c | sed 's/[{}]/\n&\n/g' | cat -s | perl -nle '/^}/ && $i--;print "\t"x$i,$_; /^{/ && $i++;'
となる。perlでまず}が出現したところでインデントを下げている。そのあとの"\t"x$iはインデントの数かけるタブという意味のように見える。そしてタブを受け取った行データの前に出力している。あとは{が現れた時にインデントを1つ増やす処理を書いて終わりだ。