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

bkrqpzef Messages postés 213 Statut Membre -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  2. bkrqpzef Messages postés 213 Statut Membre 5
     
    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
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    ;-[

    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
  4. bkrqpzef Messages postés 213 Statut Membre 5
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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