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

-1voto

Chaminda Bandara Points 874

sed est le s tream ed itor en ce sens que vous pouvez utiliser | (tuyau) pour envoyer flux standard (STDIN et STDOUT notamment) par l'intermédiaire de sed et les modifier de manière programmatique à la volée, ce qui en fait un outil pratique dans la tradition de la philosophie Unix ; mais on peut aussi éditer les fichiers directement, en utilisant la commande -i mentionné ci-dessous.
Considérez les points suivants :

sed -i -e 's/few/asd/g' hello.txt

s/ est utilisé pour s ubstituer l'expression trouvée few avec asd :

Les rares, les courageux.


Les asd, les courageux.

/g signifie "global", ce qui veut dire qu'il faut le faire pour toute la ligne. Si vous omettez le /g (avec s/few/asd/ (il doit toujours y avoir trois barres obliques, quoi qu'il arrive) et few apparaît deux fois sur la même ligne, seule la première ligne est utilisée. few est changé en asd :

Les quelques hommes, les quelques femmes, les courageux.


Les hommes asd, les quelques femmes, les courageux.

C'est utile dans certaines circonstances, comme la modification des caractères spéciaux en début de ligne (par exemple, en remplaçant les symboles "plus grand que" que certaines personnes utilisent pour citer des éléments précédents dans des fils de discussion par une tabulation horizontale, tout en laissant intacte une inégalité algébrique citée plus loin dans la ligne), mais dans votre exemple où vous spécifiez que partout few si elle doit être remplacée, assurez-vous d'avoir cette /g .

Les deux options (drapeaux) suivantes sont combinées en une seule, -ie :

-i L'option est utilisée pour modifier i n place sur le dossier hello.txt .

-e L'option indique le e xpression/commande à exécuter, dans le cas présent s/ .

Note : Il est important que vous utilisiez -i -e pour rechercher/remplacer. Si vous faites -ie vous créez une sauvegarde de tous les fichiers avec la lettre 'e' ajoutée.

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