3.9 ASCII以外の文字と表示できない文字の照合
正規表現では、ASCII以外の文字や表示できない文字は、改行を除き、特殊文字ではなく、その文字自身を表します。たとえば、UTF-8ロケールでのコマンド「grep 'Λ ω'」(「Λ」と「ω」の間の空白はタブ文字)は、「Λ」(Unicode文字U+039B GREEK CAPITAL LETTER LAMBDA)、続いてタブ(U+0009 TAB)、続いて「ω」(U+03C9 GREEK SMALL LETTER OMEGA)を検索します。
スクリプトを読みやすく、または移植可能にするため、パターンに使う文字を表示可能な文字だけ、さらに表示可能なASCII文字だけに制限しながら、特定のASCII以外の文字や、NUL以外の表示できない文字に一致させたいとします。-P(--perl-regexp)を使う場合は、PCREにいくつかの方法があります。それ以外でも、GNUプロジェクトのシェルBashを使っていれば、ANSI-C形式の引用でこれらの文字を表せます。たとえば、Bashコマンド「grep $'Λ\tω'」と「grep $'\u039B\t\u03C9'」は、どちらも先ほどの3文字の文字列「Λ ω」を検索します。ただし、Bashはgrepがパターンを受け取る前にANSI-C形式の引用を変換するため、この手法を表示可能なASCII文字への照合に使うべきではありません。たとえば、「grep
$'\u005E'」は「grep '^'」と同じで、文字「^」(U+005E CIRCUMFLEX ACCENT)を含む行だけでなく、任意の行に一致します。
PCREとANSI-C形式の引用は、POSIXに対するGNU拡張です。そのため、ASCIIで書いた移植可能なシェルスクリプトで特定のASCII以外の文字に一致させるには、ほかの方法を使うべきです。たとえば、UTF-8ロケールでは、コマンド「grep "$(printf '\316\233\t\317\211\n')"」が、読みづらいものの、Bashの「grep $'Λ\tω'」の移植可能な代替になります。ただし、どの手法でも、コマンドラインのパターンにNUL文字を直接入れることはできません。NUL文字を含められるのは、-f(--file)で指定するパターンだけです。