Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー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つ増やす処理を書いて終わりだ。