正規表現文字を正規表現文字として解釈するためにsedで正規表現文字をエスケープする必要があるのはなぜですか?

正規表現文字を正規表現文字として解釈するためにsedで正規表現文字をエスケープする必要があるのはなぜですか?


cat sed_data.txt | sed 's/\b[0-9]\{3\}\b/NUMBER/g'
私が見るには〜しなければならない正規表現を設定するには、文字をエスケープしてください。この場合、複数回解釈するには中括弧をエスケープする必要があります。
なぜ?エスケープしない限り、すべてが正規表現の文字になると思いました。それは逆です。

ベストアンサー1

sed使うからです。POSIX BRE(Essential正規表現)、Perlや友達に慣れているERE(拡張正規表現)ではありません。

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スタイルは、既存のUNIX grepコマンドで使用されているものと同様のスタイルを標準化します。これは今日でもまだ使用されている正規表現の最も古いスタイルです。このスタイルをユニークにすることは、ほとんどのメタ文字にスタイルを与えるためにバックスラッシュが必要であるということです。 POSIX EREを含む他のほとんどのスタイルは、バックスラッシュを使用してメタ文字の意味を抑制します。

で文字通り引用Craig Sondersでコメント:

少なくともGNU sedでは、-rまたは--regexp-extendedコマンドラインオプションを使用して拡張正規表現を使用するようにsedに指示できます。これは、過度のエスケープでsedスクリプトを見苦しくするのを防ぐために便利です。

おすすめ記事