GNU/Linux >> Znalost Linux >  >> Ubuntu

Odfiltrovat značky HTML a nahradit je jinými značkami HTML pomocí Sed?

Nahrazoval jsem <B> a </B> s <STRONG> a </STRONG> v souboru. Je to něco jako nahrazení značek hmtl. Použil jsem sed 's/<B>/STRONG/g' . Provedlo to úlohu, ale pokud je v souboru [B] a [/B] je přítomen. Poté se také změní na [STRONG] a [/STRONG] . Nechápu za tím logiku.

Přijatá odpověď:

Ve výchozím nastavení používá sed základní regulární výrazy. To znamená, že GNU umožňuje < odpovídat začátku slova a > odpovídat na konec slova. Všimněte si:

$ echo '<B> BBB B' | sed 's/<B>/STRONG/g'
<STRONG> BBB STRONG

<B> odpovídá slovu B který se ve výše uvedeném řetězci objeví dvakrát. Protože se shoduje se slovem B a ne lomené závorky, lomené závorky jsou ponechány beze změny.

Pokud chcete použít lomené závorky, <> , ponechte zpětné lomítko vypnuté:

$ echo '<B> BBB B' | sed 's/<B>/<STRONG>/g'
<STRONG> BBB B

<B> odpovídá otevřené lomené závorce následované B následuje uzavírací úhelník. Tedy <B> je nahrazeno <STRONG> ale B je ponechán sám.

Zachycení otevřené i koncové značky

$ echo '<B> BBB B </B>' | sed -r 's|<(/)?B>|<1STRONG>|g'
<STRONG> BBB B </STRONG>

-r je pro rozšířený regulární výraz, ale nejnovější verze GNU sed také podporují -E jako synonymum pro -r . BSD sed používá -E pro toto a údajně i budoucí standardy POSIX přijaly -E . Z důvodu kompatibility může být vhodné použít (kloboukový tip @Kos):

$ echo '<B> BBB B </B>' | sed -E 's|<(/)?B>|<1STRONG>|g'
<STRONG> BBB B </STRONG>

Ubuntu
  1. Použití grep a sed k nalezení a nahrazení řetězce

  2. Najít a nahradit sed v adresáři a podadresářích

  3. Použití sed k rozdělení řetězce s oddělovačem

  1. Použití sed k nalezení a nahrazení textových souborů v Linuxu

  2. Jak rekurzivně nahradit znaky sed?

  3. sed nahradit všechny tabulátory a mezery jednou mezerou

  1. Použití příkazů Sed,ex a perl k vyhledání a nahrazení textu v Linuxu

  2. Použití více vzorů najednou pomocí příkazu Sed

  3. Používáte Sed se speciálními znaky?