綾小路龍之介の素人思考

[perl] 日本語を含む行を出力

ファイルの中から日本語を含む行を抜き出すには、grepでは役不足なので、perlでやる。

ここで言うところの日本語の定義は、ひらがな、カタカナとする。マッチングには\p{InHiragana}や\p{InKatakana}を使うとする。このブロックを使うにはUTF-8フラグがONになっていないといけない。まずは以下のようにしてチェックする。この結果は一切表示されないので、hoge.txtの内容を読むとutf8フラグがOFFの状態ということになる。

$ perl -lne 'print if utf8::is_utf8($_);' hoge.txt

ということで、まずはutf8フラグをONにして、その内容を評価する。ただし、出力する内容はutf8フラグがOFFになっていないといけないので、encodeモジュールに含まれるdecode関数を使う。以下のようにすれば、日本語を含む行だけを抽出できる。

$ perl -MEncode -lne 'print if decode(q(utf8), $_) =~ m/\p{InHiragana}|\p{InKatakana}/;' hoge.txt

リファレンス

  1. Perl 5.8.x Unicode関連
  2. PerlのUnicodeの扱いについて ¥p{Hiragana}, ¥p{Katakana} - さかきんぐだむ
  3. Perl5.8でUTF-8のメモ/楽
  4. perl utf8 フラグ - Google 検索
  5. 404 Blog Not Found:perl - Encode 入門
  6. perl encode - Google 検索
  7. perl hiragana|katakana utf8 - Google 検索
  8. utf8::is_utf8 - Google 検索

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2008-12-31T00:40:19+09:00
  2. Modified: 2008-12-31T00:40:19+09:00
  3. Generated: 2017-09-27T23:09:16+09:00