Remplacer " par \" avec awk

Résolu/Fermé
sel - 19 févr. 2009 à 09:56
 sel - 19 févr. 2009 à 10:30
Bonjour,

Je tente d'écrire un script qui me permet de remplacer des guillements (") par un backslash guillement: \", dans un script shell avec awk.

Voici la commande que j'ai tenté d'utiliser:

desc="toto\"titi\"tata\""
gsub(/\"/, "\\", desc)
print "desc: "desc

Et voici le résultat que j'obtiens: desc: toto\titi\tata\
Alors que j'attends le résultat suivant: toto\"titi\"tata\"

Est-ce que quelqu'un aurait une idée du problème ou une autre solution à proposer ???


Merci d'avance pour votre aide
A voir également:

5 réponses

Je me suis trompée dans la commande:

desc="toto\"titi\"tata\""
gsub(/\"/, "\\\"", desc)
print "desc: "desc

Et j'obtiens le résultat suivant: desc: toto"titi"tata"

Je ne comprends pas pourquoi le backslash(\) n'est pas ajouté
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
19 févr. 2009 à 10:06
Salut,

Y'a comme un os dans ton énoncé, non ?

Ta variable est définie tel que : desc="toto\"titi\"tata\""
ce qui donne donc toto\"titi\"tata\"
et tu dis attendre :
Alors que j'attends le résultat suivant: toto\"titi\"tata\"

Cherchez l'erreur ;-\

:-))
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
19 févr. 2009 à 10:08
C'est ça que tu veux :
jp@MDK:~/tmpfs ssh$ echo $desc
toto"titi"tata"

jp@MDK:~/tmpfs ssh$ echo $desc | sed 's/\"/\\\\"/g'
toto\\"titi\\"tata\\"

jp@MDK:~/tmpfs ssh$
;-)
0
Merci jipicy,

j'utilise la commande sed avant d'utiliser l'awk, et du coup tout va bien.

Pour info, voici le bout de code:

<commande> | \
sed 's/\"/\\\"/g' |\
awk -F "|" '{
if(NF == 5){
desc=$NF
print <commande>"\""desc"\";"
}
}' >> $OutputFile


NB: je n'ai pas mis tout le code, mais le principe y est!
0
Bonjour

Merci pour ta réponse

Je me suis mal exprimée:

la chaine de départ est: desc: toto"titi"tata"

d'ailleurs si je fais un print de desc (desc="toto\"titi\"tata\""), j'ai: toto"titi"tata"

Donc la chaine de départ est: toto"titi"tata"
Et je souhaiterai obtenir: toto\"titi\"tata\"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
J'ai une contrainte: je dois utiliser awk
0