Je remplaçais <B> et </B> avec <STRONG> et </STRONG> dans un dossier. C'est un peu comme remplacer les balises hmtl. J'ai utilisé sed 's/<B>/STRONG/g' . Il a fait le travail mais si dans le fichier [B] et [/B] est présent. Ensuite, ils sont également changés en [STRONG] et [/STRONG] . Je ne comprends pas la logique derrière tout ça.
Réponse acceptée :
Par défaut, sed utilise des expressions régulières de base. Cela signifie que GNU laisse < faire correspondre le début d'un mot et > correspondre à la fin d'un mot. Observe :
$ echo '<B> BBB B' | sed 's/<B>/STRONG/g'
<STRONG> BBB STRONG
<B> correspond au mot B qui apparaît deux fois dans la chaîne ci-dessus. Parce qu'il correspond au mot B et non les crochets angulaires, les crochets angulaires restent inchangés.
Si vous souhaitez faire correspondre les chevrons, <> , laissez la barre oblique inversée :
$ echo '<B> BBB B' | sed 's/<B>/<STRONG>/g'
<STRONG> BBB B
<B> correspond au crochet ouvert suivi de B suivie d'une équerre fermante. Ainsi, <B> est remplacé par <STRONG> mais B est laissé seul.
Récupérer les balises d'ouverture et de fermeture
$ echo '<B> BBB B </B>' | sed -r 's|<(/)?B>|<1STRONG>|g'
<STRONG> BBB B </STRONG>
-r est pour les expressions régulières étendues mais les versions récentes de GNU sed prennent également en charge -E comme synonyme de -r . BSD sed utilise -E pour cela et, semble-t-il, les futures normes POSIX ont adopté -E . Ainsi, pour la compatibilité, on peut vouloir utiliser (hat tip @Kos) :
$ echo '<B> BBB B </B>' | sed -E 's|<(/)?B>|<1STRONG>|g'
<STRONG> BBB B </STRONG>