Ajouter une ligne avec sed

Résolu
wapette21 Messages postés 68 Statut Membre -  
 Eric -
Bonjour,

Je reviens vers vous car je suis très content de mon dernier poste.

J'ai toujours du mal avec la commande sed.

Je souhaite ajouter une ligne dans un fichier texte, mais je souhaite pouvoir l'insère apres
la ligne de mon choix.

la commande que j'utilise : sed '${num_ligne}a! $addtext' fichier.txt

mais sans succés.

Merci de votre retour.
Configuration: Windows XP
Firefox 3.0

19 réponses

  1. bkcuf Messages postés 1 Statut Membre 3
     
    bonjour,
    je sais que ce post est vieux mais pour ceux qui cherche encore une solution bien voici ce que je propose.

    Pour insérer(i), ajouter(a), echanger(c) une ligne avec la commande sed

    ex: ajouter en fin de fichier
    sed -e '$a\texte que vous voulez ' fichier

    ex: ajouter après une ligne "ajouter ce texte après ligne "2"
    sed -e '2a\texte que vous voulez ' fichier

    avec l'option (i) , positionne votre texte en ligne 2 et decale le reste du texte.

    J'espère que ça aidera quelqu'un
    +++
    3
  2. wapette21 Messages postés 68 Statut Membre 5
     
    Merci de ta réponse mais la solution donné ne fonctionne pas sur mon serveur,
    sed '4i\ toto' -> sed: command garbled: 4i\ toto

    J'ai lu le tuto sur le site mais les exemples ne sont pas tellement parlant enfin pour moi.

    Merci
    0
  3. nadynadia Messages postés 43 Statut Membre
     
    toto c'est un example non?
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. wapette21 Messages postés 68 Statut Membre 5
     
    Oui toto c'est bien pour un exemple, j'ai toujours le problème sed: command garbled
    je suis sous solaris 9.

    Merci
    0
  6. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Essaye comme ça alors :
    num=4; sed "$num a\
    Mais je sens que ça va venir
    " fichier.txt
    ;-))
    0
  7. wapette21 Messages postés 68 Statut Membre 5
     
    Toujours même message d'erreur,

    j'ai essayer avec i mais idem, je devrait peut-être utilisé un awk ?

    Merci
    0
  8. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    ou avec perl ;-) (je n'ai pas testé)
    perl -pi.orig -e 'print "Mais je sens que ça va venir\n" if $. == 3"' fichier.txt
    0
  9. wapette21 Messages postés 68 Statut Membre 5
     
    Alors je ne connais pas perle, mais bon j'ai essayer et ça ma donné :

    String found where operator expected at -e line 1, at end of line
    (Missing semicolon on previous line?)
    Can't find string terminator '"' anywhere before EOF at -e line 1.

    Merci
    0
  10. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Oups, j'ai rajouté une guillemets en plus ;-)
    perl -pi.orig -e 'print "Mais je sens que ça va venir\n" if $. == 3' fichier.txt
    0
  11. wapette21 Messages postés 68 Statut Membre 5
     
    Ça marche mais c'est pas stable, je m'explique quand je le lance telle que tu me la donner ca marche cependant quand je l'adapte a mon script en rajouter des variables il fait des doublons dans mon fichiers notamment pour écrire a la dernière ligne.

    mon utilisation : variable remplacer.

    perl -pi.tmp -e 'print "toto\n" if $. == 11' fichier.txt

    fichier.txt
    # Fichier de configuration contenant les jours non ouvrables de la société (Pentecôte,
    # Fichier de configuration contenant les jours non ouvrables de la société (Pentecôte,
    # Fichier de configuration contenant les jours non ouvrables de la société (Pentecôte,
    # Fichier de configuration contenant les jours non ouvrables de la société (Pentecôte,
    # jours fériés), les dates sont au format JJ/MM/AAAA.
    # jours fériés), les dates sont au format JJ/MM/AAAA.
    # jours fériés), les dates sont au format JJ/MM/AAAA.
    Apres adaptation
    # jours fériés), les dates sont au format JJ/MM/AAAA.
    14/07/2006
    14/07/2006
    Mais je sens que ça va venir -> test via la commande non adapter

    Merci
    0
  12. wapette21 Messages postés 68 Statut Membre 5
     
    Quelqu'un aurrait une autre idée ou syntax pour sed ?

    Merci
    0
  13. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Essaye ça :
    num=4; sed "$num s/.*/&\nMais je sens que ça va venir/" fichier.txt
    ;-))
    0
  14. wapette21 Messages postés 68 Statut Membre 5
     
    Je pense qu'on est pas loin, la commande fonctionne mais ne fait pas de retour a la ligne :

    num=4; sed "$num s/.*/&\n Mais je sens que ça va venir/" fichier.txt

    # Fichier de configuration contenant les jours non ouvrables de la société (Pentecôte,
    # jours fériés), les dates sont au format JJ/MM/AAAA.
    14/07/2006
    17/07/2006n Mais je sens que ça va venir
    18/07/2006
    15/08/2006

    si on pouvais inséré un retour a la ligne ca serait parfait.

    Merci
    0
  15. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Rajoute un "anti-slash" :
    sed "$num s/.*/&\\n Mais je sens que ça va venir/" 
    ;-))
    0
  16. wapette21 Messages postés 68 Statut Membre 5
     
    Bonjour,

    J'ai bien essayé mais rien a faire il ne fait de retour a la ligne, j'ai essayer aussi les '' "" sans succès.

    Merci
    0
  17. wapette21 Messages postés 68 Statut Membre 5
     
    Bonjour,

    tan pis je me suis rabattu sur la redirection du texte dans mon fichier je fait donc une insertion a la fin du fichier,

    echo $text >> $mon_fichier

    merci a tous.
    0
  18. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,
    jp@MDK:~/tmpfs ssh$ cat fichier.txt
    Bonjour,
    
    Je reviens vers vous car je suis très content de mon dernier poste.
    J'ai toujours du mal avec la commande sed.
    Je souhaite ajouter une ligne dans un fichier texte, mais je souhaite pouvoir l'insère apres
    la ligne de mon choix.
    
    jp@MDK:~/tmpfs ssh$ num=4; sed "$num a\Mais je sens que ça va venir" fichier.txt
    Bonjour,
    
    Je reviens vers vous car je suis très content de mon dernier poste.
    J'ai toujours du mal avec la commande sed.
    Mais je sens que ça va venir
    Je souhaite ajouter une ligne dans un fichier texte, mais je souhaite pouvoir l'insère apres
    la ligne de mon choix.
    
    jp@MDK:~/tmpfs ssh$
    ;-))
    -1