前にgrepでひらがな・カタカナ・漢字を抽出する方法について書いてたことがあったけど、先日置換が必要になったので念の為残しておく。

PerlのUnicodeプロパティスクリプトを使った置換(perl)

置換と言ったらsedなのだけど、残念ながらPerlのUnicodeプロパティスクリプト(\p{Hiragana}みたいな指定)がsedでは使えない。 なので、Perlで置換処理を実行する必要がある。

# perlでひらがなだけを置換する場合
command... | perl -C -ple 'use utf8;s/\p{Hiragana}/_/g'
$ cat a.txt
あaいbうcえdお
かeきfくgけiこ

$ cat a.txt | perl -C -ple 'use utf8;s/\p{Hiragana}/_/g'
_a_b_c_d_
_e_f_g_i_

使える指定方法はこれ。 \p\Pにすると否定(ひらがな以外など)になる。

種類 範囲指定
ひらがな \p{Hiragana}
カタカナ \p{Katakana}
漢字 \p{Han}

範囲指定での置換(sed)

文字を範囲指定して置換する場合。

command... | sed 's/[ぁ-ん]/_/g'

使える指定方法を雑にまとめたのが↓の表。

種類 範囲指定
ひらがな [ぁ-ん]
カタカナ [ァ-ン]
漢字 [亜-熙]
句読点など [ -】]
ひらがな [\x{3041}-\x{3096}]
カタカナ [\x{30A1}-\x{30FA}]
漢字 [々〇?\x{3400}-\x{9FFF}\x{F900}-\x{FAFF}\x{20000}-\x{2FFFF}]
句読点など [\x{3001}-\x{301B}]