J'ai un fichier contenant plusieurs lignes de XML. Je voudrais remplacer certaines parties du fichier. Certaines parties du fichier contiennent des guillemets ("
) que je voudrais remplacer. J'ai essayé de Escape la guillemaque avec \
, mais je ne pense pas que cela fonctionne en fonction du résultat de mon dossier.
Voici un exemple d'une de mes commandes SED:
sed -e "s/\"text\"/'text'/ig" file.xml > temp.tmp
Est-ce la façon dont vous échappez à des guillemets dans une commande SED ou que je fais quelque chose de mal?
Deux conseils:
Vous ne pouvez pas échapper à une seule citation dans une chaîne indiquée avec des guillemets simples. Vous devez donc fermer la citation, ajouter une citation échappée, puis ouvrez les citations à nouveau. C'est-à-dire: 'foo'\''bar'
, qui se décompose comme suit:
'foo'
Cité foo
\'
échappé '
'bar'
Cité bar
céder foo'bar
.
/
dans SED. Je trouve que l'utilisation de /
et \
Dans la même expression SED rend difficile la lecture.Par exemple, pour supprimer les guillemets de ce fichier:
$ cat /tmp/f
aaa"bbb"'ccc'aaa
Compte tenu de mes deux conseils ci-dessus, la commande que vous pouvez utiliser pour supprimer les guillemets doubles et simples est:
$ sed -e 's|["'\'']||g' /tmp/f
Basé sur mon premier conseil, la coquille réduit le deuxième argument de SED (c'est-à-dire la chaîne après le -e
) à s|["']||g
et passe cette chaîne à sed. Basé sur ma deuxième pointe, SED traite cela comme s/['"]//g
. Ça veut dire
supprimer tous les caractères correspondant à
'
ou"
(C'est-à-dire, remplacez-les sans rien)
Vous avez probablement besoin de quelque chose de plus complexe que cela pour faire ce que vous voulez, mais c'est un départ.
J'ai un port Windows d'utilitaires UNIX afin que les commandes sont un peu différentes, mais j'avais un fichier CSV avec des guillemets de virgule et de devis. Utilisation de ce fil comme guide, j'ai pu supprimer les citations via cette commande:
c:\Temp> cat report.csv | sed "s/\,/\ /g" | sed "s/[""]//g"