5.9 マルチバイト文字とロケールの考慮事項
GNU sedは、マルチバイトロケール(例:UTF-8)では有効なマルチバイト文字を処理します。7
次の例は、ギリシャ文字の大文字シグマ(Σ、Unicodeコードポイント0x03A3)を使います。UTF-8ロケールでは、シグマは2オクテット(バイト)からなりますが、sedは正しく1文字として処理します。
$ locale | grep LANG LANG=en_US.UTF-8 $ printf 'a\u03A3b' aΣb $ printf 'a\u03A3b' | sed 's/./X/g' XXX $ printf 'a\u03A3b' | od -tx1 -An 61 ce a3 62
sedにオクテットを個別に処理させるには、Cロケール(POSIXロケールとも呼ばれます)を使います。
$ printf 'a\u03A3b' | LC_ALL=C sed 's/./X/g' XXXX
(7)
正規表現の一部の境界事例は、オペレーティングシステムとlibcの実装に依存します。掲載した例は、glibcを使うGNU/Linuxシステムで想定どおりに動作することが確認されています。