<B>を置き換えていました および</B> <STRONG>を使用 および</STRONG> ファイル内。 hmtlタグを置き換えるようなものです。 sed 's/<B>/STRONG/g'を使用しました 。それは仕事をしましたが、ファイル[B]にある場合 および[/B] が存在します。次に、それらも[STRONG]に変更されます および[/STRONG] 。その背後にある論理がわかりません。
承認された回答:
デフォルトでは、sedは基本的な正規表現を使用します。つまり、GNUは< 単語の先頭と>を一致させます 単語の終わりに一致します。観察する:
$ echo '<B> BBB B' | sed 's/<B>/STRONG/g'
<STRONG> BBB STRONG
<B> Bという単語に一致します これは上記の文字列に2回表示されます。 Bという単語と一致するため アングルブラケットではなく、アングルブラケットは変更されません。
山かっこを一致させる場合は、<> 、円記号はオフのままにします:
$ echo '<B> BBB B' | sed 's/<B>/<STRONG>/g'
<STRONG> BBB B
<B> オープンアングルブラケットの後にBが続くものと一致します 角かっこを閉じます。したがって、<B> <STRONG>に置き換えられます しかしB 放っておかれます。
開始タグと終了タグの両方をキャッチする
$ echo '<B> BBB B </B>' | sed -r 's|<(/)?B>|<1STRONG>|g'
<STRONG> BBB B </STRONG>
-r 拡張正規表現用ですが、GNUsedの最近のバージョンは-Eもサポートしています。 -rの同義語として 。 BSDsedは-Eを使用します このため、そして伝えられるところによると、将来のPOSIX標準は-Eを採用しています。 。したがって、互換性のために、(hat tip @Kos)を使用することをお勧めします:
$ echo '<B> BBB B </B>' | sed -E 's|<(/)?B>|<1STRONG>|g'
<STRONG> BBB B </STRONG>