Remplacer " par \" avec awk

Résolu
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
Configuration: Windows XP
Firefox 3.0.6

5 réponses

  1. 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
    1. Modérateur
      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
      1. Modérateur
        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
        1. 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
      2. 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
        1. J'ai une contrainte: je dois utiliser awk
          0