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 :

sed : Insérer un mot en fin de chaque ligne


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2011
    Messages : 50
    Points : 45
    Points
    45
    Par défaut sed : Insérer un mot en fin de chaque ligne
    Bonjour,
    J'ai un petit soucis avec sed

    lorsque je tape la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/.*/& '"test"'/' toto.txt > toto2.txt
    avec par exemple toto.txt :
    blabla1
    blabla2
    blabla3

    j'obtiens toto2.txt :
    blabla1
    test
    blabla2
    test
    blabla3
    test

    je ne comprend pas vraiment l'erreur. Est-ce que vous pouvez m'aider ?
    Merci beaucoup !!

  2. #2
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ sed 's/$/test/' plop 
    blabla1test
    blabla2test
    blabla3test

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par Titened Voir le message
    Bonjour,
    J'ai un petit soucis avec sed

    lorsque je tape la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/.*/& '"test"'/' toto.txt > toto2.txt
    Pour insérer en fin de ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/$/ test/' toto.txt > toto2.txt
    [EDIT] grillé...[/EDIT]

    avec par exemple toto.txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    blabla1
    blabla2
    blabla3
    j'obtiens toto2.txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    blabla1
    test
    blabla2
    test
    blabla3
    test
    je ne comprend pas vraiment l'erreur. Est-ce que vous pouvez m'aider ?
    Merci beaucoup !!
    Est-ce que ton fichier vient du (ou a transité par le) monde Windoze?
    aussi pour les données...

  4. #4
    Membre du Club
    Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2011
    Messages : 50
    Points : 45
    Points
    45
    Par défaut
    Merci pour vos réponses, cependant les commandes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/$/ test/' toto.txt > toto2.txt
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/$/test/' toto.txt > toto2.txt
    ont exactement le même effet que la commande que j'avais tapé précedemment.

    Effectivement mon fichier vient de windows, pourquoi ?

  5. #5
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par Titened Voir le message
    Effectivement mon fichier vient de windows, pourquoi ?
    Parce qu'il est formaté à la sauce Windows ;-((

    Fichier au format Unix :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat -A plop 
    blabla1$
    blabla2$
    blabla3$
    Conversion au format Windows :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ unix2dos plop 
    unix2dos: converting file plop to DOS format ...
    Note le caractère "^M" en fin de ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat -A plop 
    blabla1^M$
    blabla2^M$
    blabla3^M$
    Exécution de "sed" sur le format Windows (c'est moche hein ?) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ sed 's/$/test/' plop 
    testla1
    testla2
    testla3
    La même en tenant compte du format Windows :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ sed 's/^M$/test/' plop 
    blabla1test
    blabla2test
    blabla3test
    $

  6. #6
    Membre du Club
    Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2011
    Messages : 50
    Points : 45
    Points
    45
    Par défaut
    D'accord... Je le saurais pour la prochaine fois :/
    merci !!


    mais je n'obtiens toujours pas ce que je veux...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sed 's/^M$/test/' toto.txt
    blabla1
    blabla2
    blabla3
    Absence totale de 'test'... :/

  7. #7
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par Titened Voir le message
    mais je n'obtiens toujours pas ce que je veux...
    Absence totale de 'test'... :/
    Normal, le "^M" s'obtient par la séquence de touche "CTRL-V" + "CTRL-M" et non avec un accent circonflexe suivi d'un M majuscule

    Accent circonflexe suivi d'un M majuscule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ echo "^M" | od -c
    0000000   ^   M  \n
    0000003
    Séquence de touche "CTRL-V" + "CTRL-M" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ echo "^M" | od -c
    0000000  \r  \n
    0000002

  8. #8
    Membre du Club
    Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2011
    Messages : 50
    Points : 45
    Points
    45
    Par défaut
    ok (inutile de préciser à présent que je débute héhé)

    du coup, question stupide, comment j'écris cette séquence de touche 'ctrl V + ctrl M' dans le sed ?
    parce qu'en faisait cette séquence de touche, j'ai un retour à la ligne et pas le "^M"...

  9. #9
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par Titened Voir le message
    du coup, question stupide, comment j'écris cette séquence de touche 'ctrl V + ctrl M' dans le sed ?
    parce qu'en faisait cette séquence de touche, j'ai un retour à la ligne et pas le "^M"...
    Euh... sous quel environnement es-tu ? Quel shell ? Quelle version ? etc.

  10. #10
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Sinon essaye comme ça sed 's/\x0D$/test/' c'est un zéro (0) et non la lettre O majuscule, hein ?

  11. #11
    Membre du Club
    Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2011
    Messages : 50
    Points : 45
    Points
    45
    Par défaut
    ok ça marche ! (t'as bien fait de prévenir pour le 0 !!)

    maintenant, petite dernière question :
    je viens de découvrir que mon fichier toto.txt était de la fome

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    blabla1    ^M$
    blabla2    ^M$
    blabla3    ^M$
    de ce fait, au lieu d'avoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    blabla1test
    blabla2test
    blabla3test
    j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    blabla1    test
    blabla2    test
    blabla3    test
    N'y aurait-il pas une petite option magique pour éliminer les blancs ?

    Merci beaucoup !!!!

  12. #12
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/\s\+\x0D$/test/'

  13. #13
    Membre du Club
    Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2011
    Messages : 50
    Points : 45
    Points
    45
    Par défaut
    merci

    Et dans le cas de figure où il y a certaines lignes où il n'y a pas de blanc ?
    promis, c'est la dernière question
    En tout cas, un grand merci pour tout !!

  14. #14
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Euh... sous quel environnement es-tu ? Quel shell ? Quelle version ? etc.
    Bonne question!
    J'étais en train de poster une réponse... lorsque (idée incongrue) j'ai voulu tester...
    J'ai pris le premier terminal qui trainait et, ô surprise, impossible de quoter le moindre caractère

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ stty -a
    speed 38400 baud; rows 58; columns 181; line = 0;
    intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; 
    start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = @;
    flush = ^O; min = 1; time = 0;
    -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
    -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
    opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
    isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
    J'ai pourtant bien un ^V comme lprint dans stty, mais ça ne marche pas!
    Lorsque je tape ^V il m'affiche la version du ksh:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ PD KSH v5.2.14 99/07/13.2
    quoi que je tape ensuite!

    J'ai bien essayé de changer le lprint... mais tous les caractères (de C-a à C-z) sont utilisés (par pdksh)...
    et comme je ne peux quoter aucun caractère, impossible de le remplacer par un autre caractère de contrôle
    J'ai essayé de le remplacer par ç, @ ou z, mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ stty lprint ç 
    stty: invalid argument `lprint'
    Try `stty --help' for more information.
     
    $ stty lprint z
    stty: invalid argument `lprint'
    Try `stty --help' for more information.
    Avec vi, j'ai mis dans un fichier stty lnext ^T (avec un C-v C-t (qui marche sous vi)). J'ai sourcé le fichier qui a été pris en considération, ainsi qu'en atteste un stty -a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ stty -a
    speed 38400 baud; rows 58; columns 181; line = 0;
    intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; 
    start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^T;
    flush = ^O; min = 1; time = 0;
    -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
    -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
    opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
    isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
    mais lorsque je tape ^T, il continue à permuter les 2 derniers caractères!
    Bref, impossible de taper le moindre caractère de contrôle avec pdksh!

    Sinon il reste $(echo '\r') à insérer correctement dans le sed...

    Heureusement qu'il reste bash... ou dos2unix...

  15. #15
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Sinon essaye comme ça sed 's/\x0D$/test/' c'est un zéro (0) et non la lettre O majuscule, hein ?
    ou, avec tr:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tr -d '\r' toto.txt | sed -e 's/ *$/test/' > toto2.txt

  16. #16
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par Titened Voir le message
    merci

    Et dans le cas de figure où il y a certaines lignes où il n'y a pas de blanc ?
    promis, c'est la dernière question
    En tout cas, un grand merci pour tout !!

  17. #17
    Membre du Club
    Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2011
    Messages : 50
    Points : 45
    Points
    45
    Par défaut
    ça marche !!!

    merci beaucoup !!

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

Discussions similaires

  1. ajouter un ; a la fin de chaque ligne de mon fichier CSV
    Par pelois dans le forum Conception
    Réponses: 1
    Dernier message: 21/06/2010, 09h24
  2. Réponses: 10
    Dernier message: 16/12/2009, 22h16
  3. Réponses: 5
    Dernier message: 14/04/2008, 15h27
  4. Réponses: 1
    Dernier message: 19/08/2006, 15h02
  5. Réponses: 4
    Dernier message: 19/06/2004, 22h28

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