<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>