sedクイズ

(不特定の)同じ文字の繰り返しを削って一文字だけにしたい場合

例: 
処理前 処理後
 abcccdeeeeeeeefg abcdefg

ヒント: 後方参照を使う


数字が出てきたら、下から3桁毎に,(カンマ)で区切りを入れたい場合
(Jeffrey E. F. Friedl, 『詳説 正規表現 第2版』より引用)

例: 
処理前処理後
12345yen12,345yen

例の場合は

$ echo "12345yen" | sed 's/¥(.*[0-9]¥)¥([0-9][0-9][0-9]¥)/¥1,¥2/g'

で求める出力を得られる。しかし"12345678yen"の場合は"12345,678yen"となってしまい不完全になる。一般に数字が何桁出てこようと下から3桁ずつ区切る場合にはどうすればよいか

ヒント: まず上の処理を二回行ってみる。後はシェルの機能を使って何とかする(プログラムで似たような問題をといた経験があるかも)

応用課題: この方法では複数回処理する必要があるのはなぜか。一度の変換でこの処理をする方法(正規表現)はあるだろうか

Thanks to 2008年度RA中田君

Comments