J'essaie d'utiliser SED via OS X Terminal pour effectuer une recherche et un remplacement.
Imaginez que j'ai cette chaîne jonchée tout au long du fichier texte: http://www.find.com/page
Et je veux le remplacer par cette chaîne: http://www.replace.com/page
J'ai des problèmes parce que je ne sais pas comment m'échapper correctement ou utiliser le caractère "/" dans mes chaînes. Par exemple, si je voulais simplement trouver "chat" et remplacer par "chien", j'ai trouvé la commande suivante qui fonctionne parfaitement:
sed -i '' 's/cat/dog/g' file.txt
Quelqu'un at-il des idées sur la façon de réaliser la même fonctionnalité uniquement au lieu que chat et chien aient des chaînes ou des URL qui contiennent le caractère "/"? J'ai essayé de nombreuses façons différentes d'échapper aux caractères "/", mais il semble que SED ne puisse plus "trouver" la chaîne et qu'il n'effectue aucune action de recherche et remplacement.
Toute aide ou conseil est grandement apprécié.
Merci!
/
n'est pas le délimiteur dans les commandes sed
, c'est juste l'une des possibles. Pour cet exemple, vous pouvez par exemple utiliser ,
à la place, car il n'entre pas en conflit avec vos chaînes;
echo 'I think http://www.find.com/page is my favorite' |
sed 's,http://www.find.com/page,http://www.replace.com/page,g'
sed
peut prendre ce qui suit le "s" comme séparateur. Comme vous travaillez avec URL
, il est recommandé d'utiliser un délimiteur différent de /
pour ne pas confondre sed
lorsque votre substitution se termine et que le remplacement commence.
Cela dit, vous pouvez certainement utiliser /
si vous le souhaitez aussi. Vous avez juste besoin d'échapper au littéral /
.
Vous pouvez donc:
sed 's/http:\/\/www.find.com\/page/http:\/\/www.replace.com\/page/g' input_file
ou utilisez un délimiteur différent pour éviter de rendre votre sed cryptique plus cryptique.
sed 's#http://www.find.com/page#http://www.replace.com/page#g' input_file