Probleme avec un script dans unix

Bonjour,

voila j'ai un probleme avec un script, bref j'utilise 2 fichier (fichier1 et fichier2)
le fichier2 est ainsi :
[new]

ligne 1
...
ligne n

[modifier]

.....

[supprimer]

......

[.....]

..........

je dois supprimer tout se ki se trouve sous supprimer à partir du fichier 1 c't-à-d ke les lignes ki se trouve sous supprimer dans le fichier 2 se trouve aussi dans la liste du fichier 1(ce fichier ne conntient ke des lignes)

et je dois faire le même chose avec modifier.
Configuration: Windows XP
Internet Explorer 6.0

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. j'ai oublié avant tout j'affiche d'abord tout la liste du fichier 1 et après je fais les commandes ci_dessus.

    et automatiquement dans le fichier seeresult on voit tout la liste du fichier 1 + les nouveaux lignes sans faire une ligne vide entre les deux listes donc une forme une seul liste.
    1. Modérateur
      Salut,

      Peux-tu être un peu plus explicite s'il te plaît, en illustrant avec des exemples "avant/après" le contenu de tes fichiers "fichier1 et fichier2".

      ;-))
      1. en faite le fichier 1 contient une liste de plusieurs ligne(centaines des lignes) comme ceci:
        toto.titt nonrecul kkklile
        titi.lilo kleos dflls
        sqd.sqd sqdq sdqq
        .
        .
        . etc...

        le fichier 2 est comme ceci:
        [nouveau]
        (ligne vide)
        klsd.sdn,s ssdfsdnf sdfnsdf
        sdfdsf.sdfds df qsdfsdf
        sdfqsdfsd.sdfq qsdfs dfsdff
        .
        .
        . etc...
        (ligne vide)
        [supprimer]
        (ligne vide)
        dsfgsdf.dfsgdfg dfgsdfgd dfgsdfg
        dfgsdfg.sdfg dfsgdfgd dfgfds
        dfgsdfg.dfgdfsg sdfgsdf dsfgd
        .
        .
        .etc...
        (ligne vide)
        [modifier]
        (ligne vide)
        dqds.sdf qsdfqsd qsdfs
        sdfqsd.sqdf sqdfqsdf qsdfqs
        sdfqsd.qsdf qsdf qsffds
        .
        .
        .etc ...

        mais sache qu'on veut pas modifier ni le fichier 1 et ni le fichier 2 donc j'utilise grace cette commande:
        $./script >> see_result

        le fichier see_result dois contenir la liste du fichier 1 mais en supprimer les lignes qui se trouve ente [supprimer]...et la ligne vide c'est-à-dire tout se que j'ai mis en gras(voire ci-dessus).

        je suis un specialiste dans la conception des sites web et des petits programme mais je reconnais que j'ai des problèmes avec les scripts sous unix.

        merci.
    2. Modérateur
      En espérant avoir compris ton problème et sans avoir le temps de développer, voila un exemple à adapter :
      [tmpfs]$ cat fichier1
      fbjdsfbjdsfbs
      fjkdsfkjdsf
      oiytroiezytr
      jfhnklhjfklfjs
      dsfgsdf.dfsgdfg dfgsdfgd dfgsdfg
      dfgsdfg.sdfg dfsgdfgd dfgfds
      dfgsdfg.dfgdfsg sdfgsdf dsfgd
      .
      .
      .etc...
      bvx;,nbvx;vjd
      iuoipezhre
      nkfnujo
      kfjj
      
      [tmpfs]$ cat fichier2
      [nouveau]
      
      klsd.sdn,s ssdfsdnf sdfnsdf
      sdfdsf.sdfds df qsdfsdf
      sdfqsdfsd.sdfq qsdfs dfsdff
      .
      .
      . etc...
      
      [supprimer]
      
      dsfgsdf.dfsgdfg dfgsdfgd dfgsdfg
      dfgsdfg.sdfg dfsgdfgd dfgfds
      dfgsdfg.dfgdfsg sdfgsdf dsfgd
      .
      .
      .etc...
      
      [modifier]
      
      dqds.sdf qsdfqsd qsdfs
      sdfqsd.sqdf sqdfqsdf qsdfqs
      sdfqsd.qsdf qsdf qsffds
      .
      .
      .etc ...
      
      [tmpfs]$ ligne1=$(sed -n '/^\[supprimer\]/,/^\[modifier\]/{//d;/^$/d;p}' fichier2 | sed -n '1p')
      [tmpfs]$ ligne2=$(sed -n '/^\[supprimer\]/,/^\[modifier\]/{//d;/^$/d;p}' fichier2 | sed -n '$p')
      
      [tmpfs]$ echo $ligne1
      dsfgsdf.dfsgdfg dfgsdfgd dfgsdfg
      [tmpfs]$ echo $ligne2
      .etc...
      
      [tmpfs]$ sed -n "/$ligne1/,/$ligne2/p" fichier1
      dsfgsdf.dfsgdfg dfgsdfgd dfgsdfg
      dfgsdfg.sdfg dfsgdfgd dfgfds
      dfgsdfg.dfgdfsg sdfgsdf dsfgd
      .
      .
      .etc...
      [tmpfs]
      Si j'ai le temps dans la journée (ou ce soir alors), je détaillerai les commandes...
      ;-))
      1. c'est gentil de ta part de m'avoir repondu rapidement.

        j'ai testé mais ça marche pas, en faite j'ai dejà fait sur l'ajout c'est-à-dire que j'ai ajouter tout les lignes qui se trouve entre [nouveau].......et ligne vide grace à cette commande:

        #je recupere le numero de la ligne ou se trouve [nouveau]

        num=$(sed -n '/nouveau/=' fichier2;

        #maitenant j'affiche le resultat

        sed -n ''$num','/^:space:*$/'p' fichier2;

        et j'utilise cette commande pour afficher le resultat dans un fichier seeresult:
        $./script >> seeresult

        mais je n'arrive pas avec la suppression et la modification

        merci.
    3. Modérateur
      Oups désolé j'avais mal compris le problème ce matin ;-((

      Essaie comme ça alors :
      sed  "/$ligne1/,/$ligne2/d" fichier1 > seeresult 
      ;-))
      1. non ca marche pas en faite il n'efface pas les lignes qu'il devait supprimer plutôt il affiche tout la liste du fichier 1 dans le fichier seeresult sans modification donc il fait un copie du fichier 1.
    4. Modérateur
      Ben écoute chez moi ça marche :
      jp@MDK:~/tmpfs ssh$ cat fichier1
      fbjdsfbjdsfbs
      fjkdsfkjdsf
      oiytroiezytr
      jfhnklhjfklfjs
      dsfgsdf.dfsgdfg dfgsdfgd dfgsdfg
      dfgsdfg.sdfg dfsgdfgd dfgfds
      dfgsdfg.dfgdfsg sdfgsdf dsfgd
      .
      .
      .etc...
      bvx;,nbvx;vjd
      iuoipezhre
      nkfnujo
      kfjj
      
      
      jp@MDK:~/tmpfs ssh$ cat fichier2
      [nouveau]
      
      klsd.sdn,s ssdfsdnf sdfnsdf
      sdfdsf.sdfds df qsdfsdf
      sdfqsdfsd.sdfq qsdfs dfsdff
      .
      .
      . etc...
      
      [supprimer]
      
      dsfgsdf.dfsgdfg dfgsdfgd dfgsdfg
      dfgsdfg.sdfg dfsgdfgd dfgfds
      dfgsdfg.dfgdfsg sdfgsdf dsfgd
      .
      .
      .etc...
      
      [modifier]
      
      dqds.sdf qsdfqsd qsdfs
      sdfqsd.sqdf sqdfqsdf qsdfqs
      sdfqsd.qsdf qsdf qsffds
      .
      .
      .etc ...
      
      jp@MDK:~/tmpfs ssh$ ligne1=$(sed -n '/^\[supprimer\]/,/^\[modifier\]/{//d;/^$/d;p}' fichier2 | sed -n '1p')
      jp@MDK:~/tmpfs ssh$ ligne2=$(sed -n '/^\[supprimer\]/,/^\[modifier\]/{//d;/^$/d;p}' fichier2 | sed -n '$p')
      jp@MDK:~/tmpfs ssh$ sed  "/$ligne1/,/$ligne2/d" fichier1
      fbjdsfbjdsfbs
      fjkdsfkjdsf
      oiytroiezytr
      jfhnklhjfklfjs
      bvx;,nbvx;vjd
      iuoipezhre
      nkfnujo
      kfjj
      
      
      jp@MDK:~/tmpfs ssh$
      ;-))
      1. ca marche pour toi car les lignes à supprimer se suivent mais dans mon cas les lignes ne se suivent pas.

        en faite c'est comme ça pour récupperer les lignes mais ça marche pas encore :

        sed -n '/^\[supprimer\]/,/^\[modifier\]/{//d;/^$/d;p}' fichier2 | sed -n '1,$p'

        c'est vraiment bizarre certainement il y'a quelque chose qui nous échappent.