Ansatzの備忘録

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

シェルワンライナー160本ノック問題40

問題40 雑多な変換

問題のファイルは

https://github.com/shellgei/shellgei160

からダウンロードできる。

漢数字をすべて半角数字に直し、行頭の句読点を前の行の最後に移動する問題だった。漢数字を直すうまい方法が思いつかなかったが句読点の移動はきちんとできた。

解答は

cat kanjinum.txt | ruby -rzen_to_i -ne 'puts $_.zen_to_i' | sed -zE 's/\n([。、])/\1\n/g'

となる。ruby のライブラリ zen_to_i を用いて漢数字を半角数字に直せる。ライブラリを使うときは -r の後ろにそのまま続けてライブラリ名を書く。puts は標準出力に出力するという命令で、$_ は読み込んだ文字列が格納される変数である。-n は各行ごとに処理を行うオプションで、-e はコマンドラインからスクリプトを与えるときに必要なオプションらしい。