Remplacer une ligne par une autre

Résolu
Bonjour,

Je souhaite modifier un fichier de config via un script ksh, seulement je rencontre quelque
problème.

je fait un cat -n mon_fichier.cfg et j'obtiens :

1 # Fichier de configuration contenant les jours non ouvrables de la société (Pentecôte,
2 # jours fériés), les dates sont au format JJ/MM/AAAA.
3 14/07/2006
4 17/07/2006
5 18/07/2006
6 15/08/2006
7 01/01/2007
8 17/01/2008
9 24/01/2008
10 17/07/2008
11 18/07/2008

maintenant grâce au numéro de ligne je veux modifié une ligne par exemple la 4.

je fait donc sed "/4/c 17/07/2006\"g\" toto" mon_fichier.txt

résultat -> sed: command garbled: /4/c 17/07/2006"g" toto

quelqu'un a une idée.

Merci a tous.
Configuration: Windows XP
Firefox 3.0

6 réponses

  1. Modérateur
    Salut,

    Pourquoi faire compliqué ?
    sed '4 c 17/07/2006"g" toto'
    ou
    sed '4 s|.*|&"g" toto|'
    ;-))
    0
    1. Salut,

      La premier commande ne fonctionne pas : sed '4 c 17/07/2006"g" toto' mon_fichier.cfg
      sed: command garbled: 4 c 17/07/2006"g" toto

      et la deuxieme ne remplace pas ma ligne : sed '4 s|.*|&"g" toto|' mon_fichier.cfg
      # 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/2006"g" toto
      18/07/2006
      15/08/2006
      01/01/2007
      17/01/2008
      24/01/2008
      17/07/2008
      18/07/2008

      Merci de vos réponse.
      0
      1. Bonjour,

        Difficile...

        On ne sait pas où vous voulez changer (la quatrième ligne, les lignes contenant un 4, les lignes débutant par un 4), on ne sait pas ce que vous voulez changer, et on ne sait pas ce que vous voulez mettre à la place (toto est-il le fichier qui contient la nouvelle date ?)

        Entre autres on ne sait pas pourquoi vous n'êtes pas satisfait des propositions faites.

        Manu
        0
    2. Modérateur
      [tmpfs]$ cat 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/2006
      18/07/2006
      15/08/2006
      01/01/2007
      17/01/2008
      24/01/2008
      17/07/2008
      18/07/2008
      
      [tmpfs]$ sed '4 c 17/07/2006"g" toto' 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/2006"g" toto
      18/07/2006
      15/08/2006
      01/01/2007
      17/01/2008
      24/01/2008
      17/07/2008
      18/07/2008
      
      [tmpfs]$ sed '4 s|.*|&"g" toto|' 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/2006"g" toto
      18/07/2006
      15/08/2006
      01/01/2007
      17/01/2008
      24/01/2008
      17/07/2008
      18/07/2008
      [tmpfs]$  
      ;-))
      0
      1. Je suis désoler mais je ne comprend pas, je me suis peut etre mal expliquer mon fichier.txt contient :
        # 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/2006
        18/07/2006
        15/08/2006
        01/01/2007
        17/01/2008
        24/01/2008
        17/07/2008
        18/07/2008

        ce que je souhaite c'est pourvoir modifier certaine date en les remplacent exemple :
        # 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
        toto
        18/07/2006
        15/08/2006
        01/01/2007
        17/01/2008
        24/01/2008
        17/07/2008
        18/07/2008

        J'ai remplacer ma 4 ligne par toto mais les commande ci dessus ne fonctionne pas.

        Pour information je suis sous solaris 9.

        Merci
        0
        1. Rebonjour

          sed '4 s!17/07/2006!toto!'

          Manu
          0
      2. Modérateur
        Désolé j'avais mal compris :
        sed '4 c toto'
        ou
        sed '4 s|.*|toto|'
        ;-))
        0
        1. Super merci a tout les deux vaux deux solutions fonctionne

          Merci

          a bientôt
          0