GNU/Linux >> Linux の 問題 >  >> Linux

正規表現文字として解釈されるために、Sedで正規表現文字をエスケープする必要がありますか?

例:
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スクリプトが過度にエスケープされて醜くなるのを避けたい場合に便利です。


Linux
  1. 正規表現の定義?

  2. -execの文字列から不明な文字をエスケープしますか?

  3. GNU sed の先読み正規表現の何が問題になっていますか?

  1. 先読みを使用して正規表現で特殊文字を除外する方法

  2. 文字を再帰的にsedに置き換える方法は?

  3. Bashで二重文字を見つけるための正規表現

  1. 周囲の文字を印刷せずに「sed」と一致する正規表現を抽出しますか?

  2. デフォルトで sed が拡張正規表現モードを使用しないのはなぜですか?

  3. sed による正規表現