ちょっとシェル芸botで遊んでいた際、ふと畳語(ワンワンとかドキドキとかムラムラ、ビンビン、ヌレヌレなど、反復する言葉)を抽出したり、置換するにはどうすればいいかなと思ったので、やってみることにした。 なお、grepやsedについては使用するのはGNU拡張されたものを用いるので、Mac OS Xに入っているgrepやsedでは同じことができないかもしれないので注意。
1.抽出する場合
GNU grepにはPerl正規表現を利用できるオプションがあるので、以下のように記述することで畳語を抽出できる。 (Perlの正規表現を使うことでunicode propertiesが利用できるようになるので、カタカナ/ひらがなの抽出が楽にできる)
grep -P '(\p{Katakana}{2,3}|\p{Hiragana}{2,3})\1'
blacknon@test-ubuntu:~$ echo オラ、ワクワクしてきたぞ | grep -Po '(\p{Katakana}{2,3}|\p{Hiragana}{2,3})\1'
ワクワク
blacknon@test-ubuntu:~$ echo ムラムラ学園 | grep -Po '(\p{Katakana}{2,3}|\p{Hiragana}{2,3})\1'
ムラムラ
blacknon@test-ubuntu:~$ echo ぬれぬれせんべい | grep -Po '(\p{Katakana}{2,3}|\p{Hiragana}{2,3})\1'
ぬれぬれ
Perlの正規表現を使わない場合、以下のようにする。
grep -E '([ぁ-ん]{2,3}|[ァ-ン]{2,3})\1'
blacknon@test-ubuntu:~$ echo わくわくしてたぞ! | grep -Eo '([ぁ-ん]{2,3}|[ァ-ン]{2,3})\1'
わくわく
2. 置換する場合
置換をする場合、perlを使うとunicode propertiesが利用できるので楽だ。
perl -C -ple 'use utf8;s/(\p{Katakana}{2,3}|\p{Hiragana}{2,3})\1/xxxx/g'
blacknon@test-ubuntu:~$ echo わくわくしてたぞ! | perl -C -ple 'use utf8;s/(\p{Katakana}{2,3}|\p{Hiragana}{2,3})\1/ムラムラ/g'
ムラムラしてたぞ!
sedで置換する場合、以下のようにする。
sed -r 's/([ぁ-ん]{2,3}|[ァ-ン]{2,3})\1/xxxx/g'
blacknon@test-ubuntu:~$ echo キュンキュンである!! | sed -r 's/([ぁ-ん]{2,3}|[ァ-ン]{2,3})\1/ムラムラ/g'
ムラムラである!!