109 votes

mot entier recherche et remplacer

Comment rechercher et remplacer des mots entiers à l'aide de sed?

Faire

 sed -i 's/[oldtext]/[newtext]/g' <file> 
 

remplacera également les correspondances partielles de [oldtext] que je ne veux pas que ce soit fait.

154voto

Joakim Lundborg Points 2650

\ b dans les expressions régulières correspond aux limites des mots (c'est-à-dire l'emplacement entre le premier caractère du mot et le caractère autre que le mot):

 $ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
 

132voto

Larry Gerndt Points 523

Sur Mac OS X, ni de ces regex syntaxes de travail à l'intérieur de sed pour la mise en correspondance des mots entiers

  • \bmyWord\b
  • \<myWord\>

Écoutez-moi maintenant, et croyez-moi, plus tard, ce laid syntaxe est ce que vous devez utiliser:

  • /[[:<:]]myWord[[:>:]]/

Ainsi, par exemple, pour remplacer la menthe avec de la menthe pour les mots entiers uniquement:

  • sed "s/[[:<:]]mint[[:>:]]/minty/g"

Source: re_format page de man

13voto

Mitch Wheat Points 169614
sed -i 's/\b[oldtext]\b/[newtext]/g'

7voto

Arun Points 6838

Dans une de mes machines, la délimitation du mot avec " \b " (sans les guillemets) ne fonctionnait pas. La solution consistait à utiliser " \< " pour le délimiteur initial 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
 

-1voto

ghostdog74 Points 86060
$ echo "bar embarassment"|awk '{for(o=1;o<=NF;o++)if($o=="bar")$o="no bar"}1'
no bar embarassment

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X