コマンドラインでギリシャ語を探す

コマンドラインでギリシャ語を探す

コマンドラインでPerlを使用してギリシャ語のUnicode文字を含む行のみを印刷するにはどうすればよいですか?たとえば、次の行のうち2行目のみ

  hullo, world
  χαῖρε, ὦ κόσμε

\p{Greek}明示的な範囲(0370-03ff、1f00-1fff)の代わりに機能する必要があります。

Perlを使用しない方法も歓迎しますが、sed、awk、およびgrepはこれを実行できないようです。

答え1

次のように何かを実行できます

perl -C -ne '/\p{Greek}/ and print'

答え2

どのエンコーディングを使用していますか? UTF-8なら、次のようにすることができます。

perl -CSD -ne 'print if /\p{Greek}/' input_utf8.txt >output_utf8.txt

より-CPerlrunに切り替える

他のエンコーディングの場合に使用できます。openその他の注意より細かく制御するには

たとえば、UTF-16-LEを読み書きする場合は、次のようになります。

perl -Mopen=':std,:encoding(UTF-16-LE)' -ne 'print if /\p{Greek}/' input_utf16le.txt >output_utf16le.txt

またはUTF-16-LEファイルを読み込み、UTF-8に出力します。

perl -Mopen=':encoding(UTF-16-LE)' -CS -ne 'print if /\p{Greek}/' input_utf16le.txt >output_utf8.txt

または、UTF-16-LEを読み、UTF-16-BEを作成します。

perl -Mopen=':std,:encoding(UTF-16-BE),IN,:encoding(UTF-16-LE)' -ne 'print if /\p{Greek}/' input_utf16le.txt >output_utf16be.txt

perl ... input.txt >output.txt後者の2つのケースでは、前者がファイルを読み込んでいるperl ... <input.txt >output.txt間、後者はファイルを読み取るので微妙ですが重要な違いがあるため、変更したいストリームのエンコーディングを覚えておく必要があります。STDINopen

関連情報