Problème shell expressions régulières

Résolu
lookouster Messages postés 58 Statut Membre -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour.
Je suis débutant en shell.
J'aimerais savoir s'il m'est possible avec les expressions réulières et sed de supprimer une ligne qui se termine par "00000" suivi de 11 caractères (numériques ou espace) suivi enfin de 0.
j'ai pensé à
sed -i "/.00000[0-9]..........mais pour précisé la suite oufff
J'ai tt essayé mais en vain.
Merci

14 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Essaye ça :
    sed -r '/(0{5}[0-9 ]{11}0)$/d'
    ;-))
    0
    1. lookouster Messages postés 58 Statut Membre 2
       
      Mon objectif est au fait de supprimer les lignes correspondantes dans le fichier concerné, et les documents je pense disent d'utiliser l'option -i.
      J'ai essayé ton code mais ça me fait juste un cat du fichier.
      Au fait j'ai un fichier qui tient sur 72 caractères (numérique et espace)
      Je veux supprimer les lignes dont la sous-chaine du 54ième au 58ième caractère donne "00000".
      J'ai le choix alors une chaine commençant par [0-9 ]{53}0{5} ou alors j'y vais pour une chaine qui se termine par 0{5}[0-9 ]{13}0.
      Les syntaxes ke j'utilisent dans les deux cas sont:

      Pour debut:

      sed -i '/^([0-9 ]{53}0{5})/d' fichier

      pour fin:

      sed -i '/(0{5}[0-9 ]{14})$/d' fichier

      J'ai surement dû me gourrer somewhere
      help me!!!!!!!!!!!!!
      0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Colle un bout de ton fichier ici ou sur Cjoint s'il te plaît,merci ;-))
    0
  3. bob031 Messages postés 8228 Statut Membre 473
     
    Salut,

    j'ai pensé à ceci :

    sed '/[00000]/,/[0]/d' fichier


    je ne sais pas si cela fonctionne ! A adapter bien sûr !

    :-))
    0
    1. bob031 Messages postés 8228 Statut Membre 473
       
      oups ! j'ai rien dit !

      :-))
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > bob031 Messages postés 8228 Statut Membre
         
        On a rien vu ;-))

        PS. Si tu veux vraiment qu'on ne voie plus rien, dis-le ;-)))
        0
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Effectivement dans mon 1er post je n'ai pas utilisé le paramètre "-i" parce que je fais toujours des essais en affichant la sortie sur l'écran au cas ou...
    De toute façon mieux vaut privilégier le paramètre "-i.bak" qui crée un fichier de sauvegarde.

    Ensuite concernant tes expressions, si tu veux les écrire comme tel, alors tout comme dans mon exemple il faut utiliser le paramètre "-r" (utilisation des expressions régulières) ce qui évite de devoir protéger les parenthèses et les accolades entre autre...

    Tes expressions essayes-les comme ça:
    sed -r '/^.{53}0{5}/d' fichier
    sed  '/^\.{53\}0\{5\}/d' fichier
    pour fin :
    sed -r '/0{5}.{14}$/d' fichier
    sed  '/0{\5\}.\{14\}$/d' fichier
    ;-))
    0
    1. lookouster Messages postés 58 Statut Membre 2
       
      Salut
      Merci pour vos posts respectifs; dsl hier cétè chomé dc j'étais pas au boulot.
      Au fait, les tests ke je menais étaient sur mon pc en local, j'ai fini par avoir la solution hier.
      sed -i "/00000[0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ]0.$/d" fichier

      quand je lui dis 0{5} ou [0-9 ], il ne prend pas.

      Mais anyway, actu j'ai un autre problème.
      En effet le serveur sur lekel le truc est supposé tourné est sous HP-UX. Pour la commande sed, il n'y a que les options -n , -e, -f.
      J'ai essayé de réécrire mon bout de code coe suit.

      sed -n "/00000[0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ]0.$/w resultat" fichier

      pour avoir lees lignes qui contiennent les 5*0 successifs suivis de la suite till the end.
      bien sur cela marche; mais je cherche les lignes qui n'ont pas les 5*0 aussi. C'est clair je pense que cè l'opposé; il me faut un "^" mais je n'arrive pas à le mettre où il faut on dirait. j'ai essayé (^00000), [^00000], sans resultat.
      Merci
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    en fait ça sera comme ça
    [^0][^0][^0][^0][^0]
    mais quelle horreur ta regex :-))

    0
    1. lookouster Messages postés 58 Statut Membre 2
       
      Ca ne marche pas et cè normal je pense car avec cette expression, je ne peux pas avoir un truc du genre
      10000 par exemple.
      Avec ton expression, aucun des caractères ne doit pas être nul, or moi je veux juste kils ne soient pas ts nuls à la fois.
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > lookouster Messages postés 58 Statut Membre
         
        Je réitère ma demande : voir là !!!

        Merci ;-))
        0
  7. lookouster Messages postés 58 Statut Membre 2
     
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Il est illisible ton bout de fichier ;-((
      0
      1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        allez j'ai trouvé, ça doit être ça
        [^][^][^][^][^]


        non, je plaisante :-DD
        0
      2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
         
        Ça marche ;-)))))))
        [tmpfs]$ od -a iqnuPuoNp6_boutfich
        
        0000000 etx etx etx etx etx etx etx etx etx etx etx etx etx etx etx etx
        *
        0007320 etx etx etx etx
        0007324
        
        [tmpfs]$ hexdump iqnuPuoNp6_boutfich
        
        0000000 0303 0303 0303 0303 0303 0303 0303 0303
        *
        0000ed0 0303 0303
        0000ed4
        
        [tmpfs]$
        ;-(
        0
  8. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Bon c'est good cette fois ;-))

    Est-ce que tu peux essayer ça dans un premier temps :
    sed '/0\{5\}.\{14\}$/d' fichier
    et
    sed '/0\{5\}.\{14\}$/!d' fichier
    ;-))
    0
  9. lookouster Messages postés 58 Statut Membre 2
     
    Cool, c'est djà bien. Il fallait donc le backslash d'ininterprètation lol pour simplifier l'écriture.
    Now, il me faudra rediriger chacun des deux vers deux différents fichiers. Avec sed c'est l'option /pattern/w ke j connais, mais là ya djà un d, on fait koi alors?
    0
  10. lookouster Messages postés 58 Statut Membre 2
     
    Je me souviens d'avoir essayé le echo une fois avt ki ne marchait pas avt mais là on dirait bien ke ça marche. C'était sur une autre becane avt
    Merci
    0
  11. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    sed '/0\{5\}.\{14\}$/d' fichier > fichier1
    
    sed '/0\{5\}.\{14\}$/!d' fichier > fichier2
    Non ?

    ;-))
    0
  12. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Tu peux aussi faire comme ça :
    sed -n '/0\{5\}.\{14\}$/!w fichier1' fichier
    
    sed -n '/0\{5\}.\{14\}$/w fichier2' fichier
    :-))
    0
  13. lookouster Messages postés 58 Statut Membre 2
     
    Ah ok. Le echo ne marche tjrs pas; mais j'arrive kan même djà à écrire ds mes fichiers j pense.
    Merci pr la patience, en attendant kil y ait un autre prob lol
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Le echo ne marche tjrs pas
      Ça c'est normal en mode redirection il n'y a pas d'affichage...

      mais j'arrive kan même djà à écrire ds mes fichiers j pense.
      Euh... tu penses ou t'es sûr ?
      Vaudrait mieux être sûr, je pense ;-))
      0
  14. lookouster Messages postés 58 Statut Membre 2
     
    je n'utilise pas echo pr le faire mais l'opérator >.
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      C'est bien ce que je disais, ">" étant un caractère de redirection ;-))
      0