IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Insertion dans un fichier : les \n se transforment en espaces


Sujet :

Shell et commandes GNU

  1. #1
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut Insertion dans un fichier : les \n se transforment en espaces
    Bonjour,

    Je planche sur un problème depuis un moment mais n'arrive pas à la résoudre.

    Voilà j'ai des données dans une variable $var contenant des \n (qu'on voit bien quand on affiche la variable) mais lorsque je veux insérer mes données dans un fichier cible les \n se transforment en espaces.

    J'ai essayé de forcer la substitution d'espace par \n avec sed mais cela ne marche pas.

    Voici ma commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # var=$(echo $var| sed 's/'' S/''\nS/g')
     
    echo $var >> ../fic/out/Fichier.txt
    Avez-vous des idées d'où vient le problème ?

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 677
    Par défaut
    Bonjour,

    le "problème" vient de ce que tu n'utilises pas de guillemets !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Merci de m'avoir répondu mais j'ai malheureusement le même soucis avec les guillemets...

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 297
    Par défaut
    Bonjour

    Tu dis avoir des \n. Mais en es-tu sure? Pour le savoir, tape:

  5. #5
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    Tu dis avoir des \n. Mais en es-tu sure? Pour le savoir, tape:
    Quand je parle de \n c'est que quand j'affiche ma variable sur ma console alors il y a bien des retours à la ligne, alors que quand il insère dans le fichier toutes les lignes sont concaténées.

    Comment exactement utiliser cette fonction ? Lorsque je lance mon shell il n'aime pas trop <<< :

    Comment interpréter le résultat ?

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 297
    Par défaut
    Quel est ton interpréteur de commande? Pour le savoir, tape
    Sous bash, <<< permet de faire considérer une variable comme un fichier. 'od -c' aurait montré les caractères '\n', nous assurant de leurs présences.

    La solution de N_BaH est normalement la bonne solution.

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 677
    Par défaut
    Sous bash, <<< permet de faire considérer une variable comme un fichier
    pour être précis :
    Citation Envoyé par man bash /Chaînes en ligne
    Chaînes en ligne
    Une variante aux documents en ligne, le format est :

    <<<mot

    Le mot est développé et fourni à la commande sur son entrée standard.
    cf. man bash /Document en ligne

    en gros, ça remplace un echo "$var" | commande.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     od -c <<<"a
    > b
    > c
    > d"
    0000000   a  \n   b  \n   c  \n   d  \n
    0000010
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Quel est ton interpréteur de commande? Pour le savoir, tape
    Sous bash, <<< permet de faire considérer une variable comme un fichier. 'od -c' aurait montré les caractères '\n', nous assurant de leurs présences.

    La solution de N_BaH est normalement la bonne solution.
    Mon interpréteur est : -ksh

    La solution de N_BaH ne marche malheureuseument pas.

    Pour la commande 'od -c' ça me renvoi (extrait) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    0021740    '       S   6   5   .   G   3   0   .   4   0   .   0   0   2
    0021760    ,   '   3   5   1   2   .   0   0   '       S   6   5   .   G
    0022000    3   0   .   4   0   .   0   0   3   ,   '   2   0   5   .   0
    0022020    0   '       S   8   0   .   G   0   1   .   0   0   .   0   0
    0022040    1   .   0   0   2   ,   '   0   0   0   4   3   '       S   8
    0022060    0   .   G   0   1   .   0   0   .   0   0   3   .   0   0   1
    0022100    ,   '   1       R   U   E       X   X   X   X       X   X   X
    0022120    X   '       S   8   0   .   G   0   1   .   0   0   .   0   0
    0022140    3   .   0   0   6   ,   '   R   E   S   I   D   E   N   C   E
    0022160        X   X   X   X   X   X   X   X   X   '       S   8   0   .
    0022200    G   0   1   .   0   0   .   0   0   3   .   0   0   1   ,   '
    0022220    X   X   X       X   X   X   X       X   X   X       X   X   X
    0022240    X   X   '       S   8   0   .   G   0   1   .   0   0   .   0
    0022260    0   3   .   0   1   0   ,   '   1   1   3   7   0   '       S
    0022300    8   0   .   G   0   1   .   0   0   .   0   0   3   .   0   1
    0022320    2   ,   '   X   X   X   X   X   X   X   '       S   8   0   .
    0022340    G   0   1   .   0   0   .   0   0   4   .   0   0   1   ,   '
    0022360    0   '       S   8   0   .   G   0   1   .   0   0   .   0   0
    0022400    6   ,   '   1   0   7   1   C   '  \n
    0022412
    Du coup je comprend qu'il n'y a pas de \n dans ma variable, mais comment ça se fait qu'il me l'affiche comme si ?

  9. #9
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 297
    Par défaut
    C'est normal que ça ne marche pas puisque tu utilises ksh. Par contre, ceci devrait marcher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo "a
    b
    c
    d" |od -c
    Et si c'est le cas, la redirection dans un fichier ne devrait pas poser de pb.

    [edit] Il y a bien un \n a la fin de ton extrait. Je ne sais pas si c'est suffisant [/edit]

  10. #10
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    C'est normal que ça ne marche pas puisque tu utilises ksh. Par contre, ceci devrait marcher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo "a
    b
    c
    d" |od -c
    Et si c'est le cas, la redirection dans un fichier ne devrait pas poser de pb.
    J'ai bien trouvé comment utiliser la fonction. Qui m'affiche qu'il n'y a pas de \n alors que quand on affiche la variable à l'écran il y a bien des retours à la ligne.

    Comment garder ces retours à la ligne dans mon fichier ?

  11. #11
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 677
    Par défaut
    Mon interpréteur est : -ksh
    LEQUEL ?!
    en ce qui me concerne, tant avec pdksh, que mksh, lksh (legacy), ou ksh93, pas de problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    $ lksh
    $ od -c <<<"a
    > b
    > c"
    0000000   a  \n   b  \n   c  \n
    0000006
    $ echo "a 
    > b
    > c" > fichier
    $ cat fichier
    a
    b
    c
    $ var="a
    > b 
    > c"
    $ echo "$var" > fichier
    $ cat fichier
    a
    b
    c
    $ echo $var > fichier
    $ cat fichier
    a b c
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #12
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    LEQUEL ?!
    Je n'ai rien qui s'affiche quand je met cette commande.

    J'ai résolu mon problème en forçant le remplacement de mon motif par \n.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var=$(echo "$var" | sed 's/'' S/''\\nS/g')
    Merci à tous pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DBF] Comment faire une insertion dans le fichier ?
    Par dor_boucle dans le forum Autres SGBD
    Réponses: 1
    Dernier message: 14/12/2005, 07h46
  2. Comment faire une insertion dans un fichier texte ?
    Par Isa31 dans le forum Langage
    Réponses: 10
    Dernier message: 28/12/2004, 09h06
  3. Réponses: 2
    Dernier message: 01/06/2004, 12h47
  4. Insertion dans un fichier xml à partir d'un xsl
    Par alexandre54 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 21/03/2003, 09h45
  5. Insertion dans un fichier XML
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 4
    Dernier message: 27/02/2003, 17h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo