Comment rechercher et remplacer des mots entiers avec sed?
Faire
sed -i 's/[oldtext]/[newtext]/g' <file>
remplacera également les correspondances partielles de [oldtext]
ce que je ne veux pas que ce soit fait.
\ b dans les expressions régulières correspondent aux limites du mot (c'est-à-dire l'emplacement entre le premier caractère Word et le caractère autre que Word):
$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
Sur Mac OS X, ni de ces syntaxes regex fonctionnent à l'intérieur sed pour faire correspondre les mots entiers.
\bmyWord\b
\<myWord\>
Écoutez-moi maintenant et croyez-moi plus tard, this la syntaxe laide est ce que vous devez utiliser:
/[[:<:]]myWord[[:>:]]/
Ainsi, par exemple, pour remplacer menthe avec menthe pour les mots entiers uniquement:
sed "s/[[:<:]]mint[[:>:]]/minty/g"
Source: page de manuel re_format
Utilisation \b
pour les limites de mots:
sed -i 's/\boldtext\b/newtext/g' <file>
Dans l’une de mes machines, délimitant le mot avec "\b
"(sans les guillemets) ne fonctionnait pas. La solution consistait à utiliser" \<
"pour le délimiteur de départ et" \>
"pour le délimiteur final.
Pour expliquer avec l'exemple de Joakim Lundberg :
$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
no bar embarassment
dans la commande Shell:
echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
ou:
echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
mais si vous êtes dans vim, vous ne pouvez utiliser que le dernier:
:% s/\<old\>/new/g