質問: grep, awk, sed etc など、テキストに対して動作するコマンドとその挙動の仕様を posix は定めています。テキストなので、文字コーディングをどう扱うかの問題があるかと思います。 posix がサポートする文字コードは何ですか?(どのような文字コードファイルだったら posix で処理できますか?)
回答: 日本語が混ざっているような文章で正規表現が正しく動作するかという視点で調べました。たとえば、"aあ0"と言う文字列が正規表現"a.0"にマッチするかどうかです。 POSIXが標準で必ずサポートするロケールはCのみです。それ以外が存在するかは環境依存になりますし、OSがサポートしているロケールであっても、インストールされていなければ使用できません。CロケールはASCIIエンコード1です。また、全てのロケールでは共通文字集合2のみがサポートされます。 では、grepがCロケール(ASCIIエンコード前提)として動いて、共通文字集合のみをサポートするかと言うとそうではありません。少なくともGNU grepは、サポートするロケールであれば、そのロケールに従って動作します3。GNU grepだけではなく、OS Xのgrepも同じようにロケールに従って動作します(OS X 10.11.5のja_JP.UTF-8環境で`echo 'aあ0' | grep 'a.0'`と実行して確認)。ただ、GNU grepのマニュアルにあるとおり、OSがサポートしているロケールであっても、インストールされているgrepが実際に動作するかはコンパイル時の設定などの環境依存となります。 sedについてはOS Xでは同様に対応していました。awkについてはOS Xの標準(/usr/bin/awk)では対応してませんでしたが、home brewで入れたgawkでは対応していました。 以上を踏まえると、ASCII以外については、OSやgrep/sed/awkの実装、およびインストールされているロケールや実行環境のロケールによって対応しているかが変わることになります。どんな環境でも動作するのは、ASCIIエンコードのみであり、確実に同じ動作をする場合は、Cロケールにして実行する必要がある、が結論かと思います。 もし、日本語混じりの文字列を、文字コードを考慮して正確に処理したいのであれば、Rubyなど言語レベルで複数の文字コードをサポートしているスクリプト言語で処理することを検討すべきでしょう。