Question sed to var qui sauve des caractères spéciaux


Bonjour je m tring à utiliser

sed -i -e s/"$before"/"$after"/g ~/.A/$sfi

substituer une ligne sur un fichier .A de $ avant à $ après mais les variables bouth contiennent des caractères & et je pense que c'est la cause de ne pas travailler quelqu'un peut donner une solution s'il vous plaît? Merci beaucoup


0
2017-12-30 22:15


origine


Vous pouvez trouver perl être un meilleur choix: voir Comment remplacer des chaînes dans un fichier sans regex? - steeldriver


Réponses:


C'est l'esperluette dans la pièce de rechange qui provoque votre inquiétude. Une esperluette dans la pièce de remplacement est remplacée par le texte correspondant au motif. Un exemple:

$ before="time&again"
$ after="to&fro"
$ sed "s/$before/$after/" <<END
> hello
> world time&again !
> END
hello
world totime&againfro !

Donc, le texte correspondant time&again est remplacé par to&fro, sauf le & entre "to" et "fro" est lui-même remplacé par le texte correspondant.

La solution consiste à échapper à l'esperluette du côté remplacement. En utilisant substitution du paramètre bash donnera les résultats souhaités:

sed "s/$before/${after//&/\\&}/"

2
2017-12-30 22:40



"Je pense que c'est la cause de ne pas travailler" ... OP sait à peu près que c'est le problème. La question est: quelle est la solution? - muru
Je pense qu'il ne savait pas pourquoi c'était un problème. Mais bien sûr, vous avez raison. Réponse mise à jour - glenn jackman