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>