181 votes

Comment insérer des chaînes de caractères contenant des slashs avec sed ?

J'ai un projet Visual Studio, qui est développé localement. Les fichiers de code doivent être déployés sur un serveur distant. Le seul problème, ce sont les URL qu'ils contiennent, qui sont codées en dur.

Le projet contient des URL telles que ?page=one . Pour que le lien soit valide sur le serveur, il doit être /page/one .

J'ai décidé de remplacer toutes les URL dans mes fichiers de code par sed avant le déploiement, mais je suis bloqué par les barres obliques.

Je sais que cette solution n'est pas très jolie, mais elle est simple et me ferait gagner beaucoup de temps. Le nombre total de chaînes de caractères que je dois remplacer est inférieur à 10. Le nombre total de fichiers qui doivent être vérifiés est de ~30.

Voici un exemple décrivant ma situation :

Commande que j'utilise :

sed -f replace.txt < a.txt > b.txt

replace.txt qui contient toutes les chaînes de caractères :

s/?page=one&/pageone/g
s/?page=two&/pagetwo/g
s/?page=three&/pagethree/g

a.txt :

?page=one&
?page=two&
?page=three&

Contenu de b.txt après avoir exécuté ma commande sed :

pageone
pagetwo
pagethree

Ce que je veux b.txt à contenir :

/page/one
/page/two
/page/three

3voto

Kent Points 71470

Cette ligne devrait fonctionner pour vos 3 exemples :

sed -r 's#\?(page)=([^&]*)&#/\1/\2#g' a.txt
  • J'ai utilisé -r pour éviter de s'échapper.
  • la ligne devrait être générique pour votre cas un, deux trois. vous n'avez pas besoin de faire le sous 3 fois

tester avec votre exemple (a.txt) :

kent$  echo "?page=one&
?page=two&
?page=three&"|sed -r 's#\?(page)=([^&]*)&#/\1/\2#g'
/page/one
/page/two
/page/three

1voto

Ion Cojocaru Points 2343

replace.txt devrait être

s/?page=/\/page\//g
s/&//g

1voto

capcom923 Points 330

Veuillez consulter cet article http://netjunky.net/sed-replace-path-with-slash-separators/

Il suffit d'utiliser | au lieu de /

0voto

Sirar Salih Points 101

Excellente réponse d'Anonyme. \ J'ai résolu mon problème lorsque j'ai essayé d'échapper aux guillemets dans les chaînes HTML.

Ainsi, si vous utilisez sed pour retourner des modèles HTML (sur un serveur), utilisez la double barre oblique inversée au lieu de la simple :

var htmlTemplate = "<div style=\\"color:green;\\"></div>";

0voto

Mark Points 1

Une alternative plus simple consiste à utiliser AWK comme sur cette réponse :

awk '$0="prefix"$0' file > new_file

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