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

Htmlタグを除外し、Sedを使用して他のHtmlタグに置き換えますか?

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

Ubuntu
  1. Linuxでsedを使用してテキストファイルを検索および置換する

  2. Sedコマンドで一度に複数のパターンを使用する

  3. 大きなファイルにSedとParallelを使用して、行を別のコンテンツに置き換えますか?

  1. LinuxでSed、ex、perlコマンドを使用してテキストを検索および置換する

  2. 特殊文字でSedを使用していますか?

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

  1. 複数のファイルテキストをSedに置き換えますか?

  2. grep と sed を使用して文字列を検索して置換する

  3. ディレクトリとサブディレクトリで検索して sed に置き換えます