例:
cat sed_data.txt | sed 's/b[0-9]{3}b/NUMBER/g'
私がしなければならない 文字をエスケープして正規表現を形成します。この場合、何度も解釈されるために中括弧をエスケープする必要がありました。
なぜですか?逃げない限り、すべてが正規表現のキャラクターになると思っていました。つまり反対です。
承認された回答:
これは、sed
が原因です。 Perlや友人からおそらく慣れているERE(拡張正規表現)ではなく、POSIX BRE(基本正規表現)を使用します。
sed(1)
から マニュアルページ:
REGULAR EXPRESSIONS
POSIX.2 BREs should be supported, but they aren't completely because of
performance problems. The n sequence in a regular expression matches
the newline character, and similarly for a, t, and other sequences.
上記のリンクからの関連する引用:
基本正規表現またはBREフレーバーは、従来のUNIXgrepコマンドで使用されるものと同様のフレーバーを標準化します。これは、現在も使用されている最も古い正規表現フレーバーです。このフレーバーを際立たせる1つの点は、ほとんどのメタ文字は、メタ文字にそのフレーバーを与えるために円記号を必要とすることです。 POSIX EREを含む他のほとんどのフレーバーは、バックスラッシュを使用してメタ文字の意味を抑制します。
Craig Sandersのコメントから逐語的に引用:
少なくともGNUsedでは、-rまたは–regexp-extendedコマンドラインオプションを使用して拡張正規表現を使用するようにsedに指示できることに注意してください。これは、sedスクリプトが過度にエスケープされて醜くなるのを避けたい場合に便利です。