このページの内容

5.6 正規表現の拡張

次のシーケンスは、正規表現(アドレスとsコマンドで使用)の中で特別な意味を持ちます。

これらは基本正規表現でも拡張正規表現でも使えます(つまり、-E/-rオプションの有無にかかわらず使えます)。

\w

任意の「単語文字」に一致します。「単語文字」とは、任意の字母、数字、またはアンダースコア文字です。

$ echo "abc %-= def." | sed 's/\w/X/g'
XXX %-= XXX.
\W

任意の「単語文字以外の文字」に一致します。

$ echo "abc %-= def." | sed 's/\W/X/g'
abcXXXXXdefX
\b

単語境界に一致します。つまり、左側が「単語文字」で右側が「単語文字以外の文字」である場合、またはその逆の場合に一致します。

$ echo "abc %-= def." | sed 's/\b/X/g'
XabcX %-= XdefX.
\B

単語境界以外のすべての位置に一致します。つまり、左側と右側の文字がともに「単語文字」であるか、ともに「単語文字以外の文字」である場合に一致します。

$ echo "abc %-= def." | sed 's/\B/X/g'
aXbXc X%X-X=X dXeXf.X
\s

空白文字(スペースとタブ)に一致します。パターンスペースやホールドスペースに含まれる改行にも一致します。

$ echo "abc %-= def." | sed 's/\s/X/g'
abcX%-=Xdef.
\S

空白文字以外の文字に一致します。

$ echo "abc %-= def." | sed 's/\S/X/g'
XXX XXX XXXX
\<

単語の先頭に一致します。

$ echo "abc %-= def." | sed 's/\</X/g'
Xabc %-= Xdef.
\>

単語の末尾に一致します。

$ echo "abc %-= def." | sed 's/\>/X/g'
abcX %-= defX.
\`

パターンスペースの先頭だけに一致します。複数行モードの^とは異なります。

次の2つの例を比較してください。

$ printf "a\nb\nc\n" | sed 'N;N;s/^/X/gm'
Xa
Xb
Xc

$ printf "a\nb\nc\n" | sed 'N;N;s/\`/X/gm'
Xa
b
c
\'

パターンスペースの末尾だけに一致します。複数行モードの$とは異なります。