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
    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
    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
        ;-[

        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. 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
            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