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システムで想定どおりに動作することが確認されています。