Remplacer " par \" avec awk

Résolu
sel -  
 sel -
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. sel
     
    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
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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. sel
       
      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
  4. sel
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

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