2012-05-10 6 views
0

J'ai une liste qui ressemble à ceci:Remplacer chaîne exacte dans bash

server 
server.apple.com 
server.apple.com 
server 
server.apple.com 

Maintenant, je voudrais ajouter « .apple.com » aux lignes qui dit juste « serveur ». Je l'ai essayé avec sed:

sed -e 's/\bserver\b/server.apple.com/g' 

Répondre

2

Vous pouvez utiliser:

sed 's/^server$/server.apple.com/g' 

^ signifie début de la ligne et $ signifie la fin de la ligne.

Vous n'avez pas non plus besoin de l'argument -e, car il s'agit simplement d'une regex de base.

Si vous voulez la recherche de cas insensible pour server (aussi correspondre SERVER et SErvEr) vous pouvez utiliser la fonction I, mais il est pas pris en charge par les différentes versions de sed:

sed 's/^server$/server.apple.com/Ig' 

Si vous n'avez pas une version sed qui prend en charge I vous pouvez utiliser:

sed 's/^[Ss][Ee][Rr][Vv][Ee][Rr]$/server.apple.com/g' 
+0

oh, trop tard. btw le '-e' n'est pas nécessaire, non? – tsusanka

+0

@aGr non ce n'est pas – Tyilo

+0

Merci! Si évident quand vous le voyez :) –

2
sed 's/^server$/server.apple.com/g' inputfile 

^ signifie le début d'une ligne et $ la fin, donc cela correspond uniquement aux lignes, qui n'ont pas de texte supplémentaire.

+0

'phrase' pourrait ne pas être le meilleur mot pour le décrire. – ArjunShankar

+0

Trop fatigué .. merci – tsusanka

Questions connexes