前に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}] |