Aide fonction sed sous linux

Résolu
abdali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   -  
abdali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
voila je voudrais savoir si c'est possible de modifier des lignes d'un fichier texte en prenant le numéro de lignes.
c'est à dire supprimer une occurrence de ligne dans un fichier texte.
exemple:

1 a
2 b
3 c
4 d
5 e
6 f
7 a
8 b
9 g
10 a
11 b
12 c
13 d
14 e
15 f
16 a
17 b
18 g

merci.
Configuration: Linux
Firefox 2.0.0.11

19 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Ben forcément comme ce n'est pas le même genre de résultat, faut adapter ;-\
    sed -nse '/RAPPEL/,$ {/M\.\|Mme/{n;N;s#<[^>]*>##g;s/[ ]\{2,\}//g;s/\n/ : /p}}'
    Testé sur cette page

    ;-))
    1
    1. abdali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   8
       
      Bonsoir,
      encore une fois merci ça marche tres bien.
      0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    #n
    /ELECTIONS/,/officiels/ {
        // d
        /strong/ {
            N
            s/<.*>//
            p
        }
    }
    /M\.\|Mme/ {
            n
            N
            s#<[^>]*>##g
            s/[ ]\{2,\}//g
            s/\n/ : /p
    }
    1
    1. abdali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   8
       
      merci ça marche tres bien
      0
  3. abdali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   8
     
    merci.
    tu es mon sauveur.
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. abdali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   8
     
    bonjour,
    encore une fois je voudrais savoir comment faire pour afficher tout les resultats numeriques de ce fichier que tu connais https://www.cjoint.com/?ctnfHHB4Oz mis à part les pourcentages
    merci
    0
  6. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Euh... quelques précisions s'imposent là ;-\

    Quels résultats exactement ?
    L'affichage doit être comment ?
    0
  7. abdali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   8
     
    j'ai ouvert un "topic comment selectionner avec la fonction sed" j'ai tout expliquer mais je te réexplique ici:
    0
  8. abdali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   8
     
    je voudrais savoir comment faire pour récuperer les données du fichier présent avec la fonction sed:

    Accueil > Elections > Les résultats > BRETAGNE > Département 22
    Les élections
    RESULTATS DE L'ELECTION PRESIDENTIELLE

    DIMANCHE 6 MAI 2007

    COTES D'ARMOR (22) -- Allineuc (résultats officiels)

    Résultats par commune :
    Cliquez sur la lettre correspondant à l'initiale
    A B C D E F G H I J K L M N P Q R S T U V Y

    Nombre % Inscrits
    Inscrits 408 100,00
    Abstentions 36 8,82
    Votants 372 91,18

    Nombre % Votants
    Blancs ou nuls 10 2,69
    Exprimés 362 97,31

    Voix % Exprimés
    M. Nicolas SARKOZY 185 51,10
    Mme Ségolène ROYAL 177 48,90

    RAPPEL DES RESULTATS 1er tour
    DIMANCHE 22 AVRIL 2007
    Nombre % Inscrits
    Inscrits 408 100,00
    Abstentions 43 10,54
    Votants 365 89,46

    Nombre % Votantsbesoin d'aide pour
    Blancs ou Nuls 2 0,55
    Exprimés 363 99,45

    Voix % Exprimés
    M. Olivier BESANCENOT 7 1,93
    Mme Marie-George BUFFET 1 0,28
    M. Gérard SCHIVARDI 2 0,55
    M. François BAYROU 53 14,60
    M. José BOVÉ 6 1,65
    Mme Dominique VOYNET 2 0,55
    M. Philippe de VILLIERS 13 3,58
    Mme Ségolène ROYAL 110 30,30
    M. Frédéric NIHOUS 9 2,48
    M. Jean-Marie LE PEN 28 7,71
    Mme Arlette LAGUILLER 5 1,38
    M. Nicolas SARKOZY 127 34,99

    je voudrais avoir que les nombres et non pas les pourcentages classés dans cet ordre et sans les noms avant c'est a dire de cette maniere:

    408
    36
    372
    10
    362
    185
    177
    .
    .
    .
    .127
    si quelqu'un peut m'aider je suis nul en programmation.voici joint le fichier :https://www.cjoint.com/?cmnoBpJozR
    merci
    0
  9. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Oui je l'avais vu entre temps, du coup je le supprime et réponds ici...
    sed -n '/Inscrits/,/résultat/{\§tdcd">[ ][ ]*[0-9][0-9]*§{N;s/<[^>]*>//g;s/\x20//g;P}}'
    ;-))
    0
  10. abdali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   8
     
    oui d'accord je vais le tester et je te reponds
    0
  11. abdali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   8
     
    voila ce que ça me donne:

    dali@k-mna-091:~$ sed -n '/Inscrits/,/résultat/{\§tdcd">[ ][ ]*[0-9][0-9]*§{N;s/<[^>]*>//g;s/\x20//g;P}}' 22001.html
    sed: -e expression n°1, caractère 52: commande inconnue: `�'

    dali@k-mna-091:~$ sed -n '/Inscrits/,/résultat/{\§tdcd">[ ][ ]*[0-9][0-9]*§{N;s/<[^>]*>//g;s/\x20//g;P}}' 22001.html > fichier sortie

    sed: -e expression n°1, caractère 52: commande inconnue: `�'
    dali@k-mna-091:~$
    0
  12. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Change le caractère "§" par "#", sinon chez moi avec l'un ou l'autre ça marche bien :
    $ sed -n '/Inscrits/,/résultat/{\#tdcd">[ ][ ]*[0-9][0-9]*#{N;s/<[^>]*>//g;s/\x20//g;P}}' cmnoBpJozR_22001.html
    408
    36
    372
    10
    362
    185
    177
    408
    43
    365
    2
    363
    7
    1
    2
    53
    6
    2
    13
    110
    9
    28
    5
    127
    ;-))
    0
  13. abdali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   8
     
    merci beaucoup
    ça marche nikel
    0
  14. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    De rien ;-))
    0
    1. abdali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   8
       
      bonjour,
      je sollicite encore une fois ton aide, car je voudrais savoir si tu peux me donner une explication de la fonction que tu m'as donné même sommaire ou bien un tutoriel en français pour bien apprendre sed.
      merci.
      0
      1. abdali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   8 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Bonjour,

        comme d'habitude, je te remercie beaucoup pour ton aide.

        @+.
        0
  15. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Les explications de la syntaxe :
    -n
    Affichage que sur demande
    
    /Inscrits/,/résultat/
    Adressage des lignes où sera confiner le traitement
    
    {
    Regroupement des commandes qui seront appliquées à la plage d'adresse
    
    \#tdcd">[ ][ ]*[0-9][0-9]*#
    Nouvel adressage à l'intérieur du précédent visant un motif particulier
    
            \#
            On définit un nouveau délimiteur (#) autre que celui par défaut (/)
            vu qu'il est contenu dans la chaîne recherchée.
            Donc on le protège (\) pour le définir.
    
            tdcd">[ ][ ]*[0-9][0-9]*
            L'expression régulière qui définit le motif recherché, à savoir :
            - qui commence par tdcd">
            - suivit éventuellement par au moins 1 espace ou plus [ ][ ]*
            - suivit éventuellement par au moins 1 chiffre ou plus [0-9][0-9]*
    
    {
    Regroupement des commandes qui seront appliquées à la nouvelle plage d'adresse
    
    N;
    Quant une ligne satisfaisant le motif est trouvée, on ajoute la ligne suivante dans l'espace de travail
    
    
    s/<[^>]*>//g;
    On efface tout ce qui se trouve entre "<" et ">" (on prend soin de spécifier de s'arrêter au 1er ">" trouvé ([^>]*), sans quoi tout ce qu'il y a entre le 1er "<" rencontrée et le dernier ">" sur la ligne serait effacer du fait de la gourmandise des expressions régulières), d'où la présence du flag "g" pour signifier la globalité de chaque expression
    
    
    s/\x20//g;
    On efface tous les espaces vides. On n'est pas obligé dans ce cas d'employer la valeur ASCII (\x20), on aurait très bien pu l'écrire : s/[ ][ ]*//g
    
    P
    On n'affiche que la 1ère partie (délimitée par le caractère fin de ligne "\n") du contenu de l'espace de travail, vu que tu ne veux pas les pourcentages, c'est d'ailleurs le pourquoi de l'emploi de la commande "N".
    
    }
    Fin du 2ème groupement de commandes
    
    }
    Fin 1er groupement de commandes
    ;-))
    0
    1. abdali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   8
       
      bonjour,
      je te remercie pour toutes ces précisions, c'est le top.
      merci et à la prochaine.
      0
    2. abdali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   8
       
      salut jipicy,
      voila j'ai essayé d'utiliser la commande que tu m'avais donné avec les données des résultats législatives 2007 voici un exemple de ces pages https://www.cjoint.com/?dfo0g68UmL .mais le problème c'est que le nombre de candidats est différent dans chaque commune c'est à dire dans chaque region les listes diffèrent donc les pages html ne sont pas les mêmes.Et moi je voudrais avoir les noms des candidats leur parti avec leur score j'ai essayé de modifier la commande que tu m'as donné mais j'ai pas pu;
      es ce que tu pourrais me donner une solution pour ce problème merci.
      voici la fonction que j'ai utilisé pour avoir les noms et les nombres:
      sed -nse '/M\.\|Mme/{N;s#<[^>]*>##g;s/[ ]\{2,\}//g;s/\n/ : /p}' https://www.cjoint.com/?dfo0g68UmL .html mais il manque quelquechose pour afficher les nombres.
      merci
      0
  16. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Re-

    Ben écoute chez moi je n'ai pas de problème, la commande m'affiche bien tous les candidats et leur scrore (avec un doublon pour les 2 candidats du second tour).

    J'ai un résultat de la forme :

    M Durand Paul : 11111
    Mme Dupond Lajoie : 2222
    etc.
    etc.

    Pour ne pas avoir les doublons sur les candidats du second tour :
     sed -nse '/RAPPEL/,$ {/M\.\|Mme/{N;s#<[^>]*>##g;s/[ ]\{2,\}//g;s/\n/ : /p}}' 5356.html
    ;-))
    0
  17. abdali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   8
     
    c'est les resultats des legislatives regarde ce qui s'affiche chez moi

    ��Mme��Nicole��MORHAN : Front national
    ��Mme��Annick��GUERIN : Communiste
    ��Mme��Martine��GRASSINEAU : Extr�me gauche
    ��M.��No�l��ANDRE : Extr�me droite
    ��Mme��Nathalie��CLERMONT : Mouvement pour la France
    ��M.��Dominique��PINGANNAUD : Chasse P�che Nature Traditions
    ��Mme��B�atrice��LE MARRE : Socialiste
    ��Mme��Gis�le��CITHAREL : Les Verts
    ��Mme��Martine��SELLERET : Divers
    ��Mme��Yvette��FOLLIARD : UDF-Mouvement D�mocrate
    ��M.��Lo�c��BOUVARD : Union pour un Mouvement Populaire
    et moi je voudrais avoir :

    front national 25
    communistes 2
    .
    .
    etc.

    car les pages des resultats ne sont pas toutes les mêmes.
    merci encore
    0
  18. abdali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   8
     
    bonjour,
    es ce que c'est possble de separer les resultats de plusieurs pages dans un fichier avec la fonction sed c'est à dire dans un fichier qui contiendrait plusieurs pages que tu m'as donné comme exemple precedemment par exemple ,pourrais je les separer par le nom de la circonscription par exemple pour differencier entre les resultats et ne pas avoir une liste des noms continus.
    merci encore pour ton aide
    0
  19. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    [tmpfs]$ cat script.sed
    #n
    /ELECTIONS/,/officiels/ {
        // d
        /strong/ {
            N
            s/<.*>//
            p
        }
    }
    /RAPPEL/,$ {
        /M\.\|Mme/ {
            n
            N
            s#<[^>]*>##g
            s/[ ]\{2,\}//g
            s/\n/ : /p
        }
    }
    
    [tmpfs]$ sed -f script.sed -s *.html
    
              HAUTE GARONNE
            (31) -- 1ère circonscription
    Extrême gauche : 2 115
    Front national : 1 304
    Socialiste : 12 758
    Divers : 0
    Divers : 401
    Extrême gauche : 1 275
    UDF-Mouvement Démocrate : 3 869
    Les Verts : 2 199
    Divers : 27
    Extrême gauche : 219
    Chasse Pêche Nature Traditions : 120
    Divers gauche : 203
    Divers : 5
    Divers droite : 302
    Divers : 102
    Divers : 108
    Ecologiste : 306
    Majorité présidentielle : 15 152
              HAUTE GARONNE
            (31) -- 2ème circonscription
    Union pour un Mouvement Populaire : 25 587
    Front national : 2 336
    Divers : 0
    Mouvement pour la France : 598
    Les Verts : 2 793
    Divers : 552
    Divers : 6
    Socialiste : 24 733
    Extrême gauche : 1 977
    Communiste : 1 941
    Extrême gauche : 309
    Chasse Pêche Nature Traditions : 576
    Majorité présidentielle : 2 795
    UDF-Mouvement Démocrate : 5 982
    Divers droite : 83
    [tmpfs]$
    ;-))
    0
    1. abdali Messages postés 161 Date d'inscription   Statut Membre Dernière intervention   8
       
      bonjour,
      voila ce qui s'affiche pour moi :
      MORBIHAN

      Front national : 45
      Communiste : 35
      Extrême gauche : 22
      Extrême droite : 8
      Mouvement pour la France : 21
      Chasse Pêche Nature Traditions : 10
      Socialiste : 504
      Les Verts : 45
      Divers : 17
      UDF-Mouvement Démocrate : 125
      Union pour un Mouvement Populaire : 720
      MORBIHAN

      Front national : 21
      Extrême gauche : 5
      Socialiste : 228
      Extrême gauche : 6
      Communiste : 35
      Régionaliste : 21
      Union pour un Mouvement Populaire : 359
      Les Verts : 27
      Divers : 12
      Mouvement pour la France : 14
      Extrême gauche : 31
      Divers : 20
      Divers droite : 14

      je voudrais que tout s'affiche même les resultats du premier tour et les repetitions aussi.
      encore une fois je te remerci beaucoup.
      pardon pour le dérangement.
      0