2 votes

sed : Remplacer les lignes correspondant à un motif qui contient des barres obliques ?

Je sais que cette question a déjà été posée, mais je n'arrive pas à trouver la bonne syntaxe pour ma commande sed.

Je dois remplacer OPP/com.user.opp.orchest.po.services.stub-npo/npo-stub avec OPP/com.user.opp.orchest.po.services.stub-ica/npo-ica

Un extrait du fichier que je remplace est le suivant :

config.xml

<compareType>PLAIN</compareType>
<pattern>
OPP/com.user.opp.orchest.po.services.stub-npo/npo-stub
</pattern>
<branches>
<com.sonyuser.hudson.plugins.gerrit.trigger.hudsontrigger.data.Branch>
<compareType>ANT</compareType>
<pattern>master</pattern>
</com.sonyuser.hudson.plugins.gerrit.trigger.hudsontrigger.data.Branch>
</branches>
${REPO_MIRROR}/OPP/com.user.opp.orchest.po.services.stub-npo/npo-stub

J'ai essayé ce qui suit,

sed -i '/^\/OPP/\com.user.opp.orchest.po.services.stub-npo/\npo-stub\/OPP/\com.user.opp.orchest.po.services.stub-ica/\npo-ica/g' config.xml

0voto

Wiktor Stribiżew Points 100073

Vous devez spécifier s et remplacez la commande /\ avec \/ . Il y a également d'autres erreurs de frappe ( \/ au départ n'est pas nécessaire). De même, échappez les points pour qu'ils correspondent aux points littéraux. Une bonne idée est d'utiliser un autre délimiteur ici au lieu de / par exemple , parce que vous avez / chars dans la regex et les parties de remplacement.

Vous pouvez utiliser

sed -i 's,^OPP/com\.user\.opp\.orchest\.po\.services\.stub-npo/npo-stub,OPP/com.user.opp.orchest.po.services.stub-ica/npo-ica,' file

Voir le Démonstration en ligne

0voto

Dans votre commande, il manque s pour la substitution et ont échappé à tort \ caractère. De plus, comme vous avez répondu à mon commentaire, que vous voulez le remplacer à partir de n'importe quel endroit du fichier, vous n'avez pas besoin d'utiliser la méthode de remplacement des caractères. ^ dans votre regex. Et point . en regex signifie n'importe quel caractère, ils doivent donc être échappés également.

Vous pouvez utiliser cette commande,

sed -i 's/OPP\/com\.user\.opp\.orchest\.po\.services\.stub-npo\/npo-stub/OPP\/com.user.opp.orchest.po.services.stub-ica\/npo-ica/g' yourfilename

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