Sed n'est pas encore sous contrôle ...

Salut salut,
Je suis encore bloqué avec l'utilisation de SED, avec la commande :
sed -i '/bateau/{s##maison#;q}'  fichier


La commande fonctionne mais supprime le reste du fichier après la ligne concernée.
Help.
Configuration: Linux
Firefox 3.0.8

5 réponses

  1. Modérateur
    Re-

    Euh...ça je crois que ça va pas être possible ;-((

    C'est possible sur la sortie standard, mais pas avec l'option "-i".
    0
    1. Voilà imaginons deux fichiers :

      fichier1.txt :
      bateau
      bateau
      bateau

      fichier2.txt :
      bateau
      bateau
      bateau

      J'aimerai que cela devienne :

      fichier1.txt :
      maison
      bateau
      bateau

      fichier2.txt :
      bateau
      bateau
      bateau

      Si je lance une deuxième fois :

      fichier1.txt :
      maison
      maison

      bateau

      fichier2.txt :
      bateau
      bateau
      bateau

      Et une quatrième fois par exemple :

      fichier1.txt :
      maison
      maison
      maison


      fichier2.txt :
      maison
      bateau
      bateau

      La commande
      sed -i '/bateau/{s##maison#;q}'  fichier*.txt
      me convient presque mais retourne :

      fichier1.txt :
      maison

      fichier2.txt :
      bateau
      bateau
      bateau

      :)
      0
      1. Modérateur
        ;-[

        C'est vrai que sorti du contexte j'avais du mal à saisir ;-(

        Bon pour le reste faudrait en savoir davantage.
        C'est juste le 1er motif rencontré que tu veux remplacer ?
        0
        1. Yop Jipicy,
          Cf message 4 de : http://www.commentcamarche.net/forum/affich 11587230 sed et ses caprices ou les miens?#4
          s//MAISON/
          Pas la peine de répéter le motif vu que c'est celui-là même qu'on veut remplacer, donc on utilise la syntaxe s// qui correspond à s/BATEAU/ 

          Le changement fonctionne bien mais comment lui expliquer de s'arrêter afin de ne pas faire plusieurs fichiers --> Ce qui explique l'utilisation des { } par exemple dans un :
          sed -i '/bateau/{s##maison#;q}'  fichier*.txt

          Sans pour autant supprimer le reste du fichier modifié surtout :D
          thx
          0
          1. Modérateur
            Salut,

            Ben c'est normal, c'est ce que tu demandes avec la commande "q" :
            quitter sed sans procéder à aucune autre commande ni évaluer une autre entrée...

            Dont acte.

            Au passage, "s##maison#" c'est sensé faire quoi ? (remplacer rien par maison ?)
            0