
コマンドラインで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
他のエンコーディングの場合に使用できます。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
間、後者はファイルを読み取るので微妙ですが重要な違いがあるため、変更したいストリームのエンコーディングを覚えておく必要があります。STDIN
open