Sed et expression régulières

Bonjour,
J'ai une expression régulière qui ne me donne pas exactement le résultat souhaité :
J'ai un fichier qui contient :

../sessions/02 - Selection/Nom_fichier_H1_blabla.ses
../camp/01 - Loisir/AutreNom_00_blabla_H2_H_blibli.ses

le sed
sed "s#\(..\)\([0-9]*\)/\(.[^_]*_\)\(..\)\(.*\)#\4;5;\3\4\5#" monfichier.txt >> liste.txt
(merci Jipicy)

me donne respectivement :
fi;5;sessions/02 - Selection/Nom_fichier_H1_blabla.ses
00;5;camp/01 - Loisir/AutreNom_00_blabla_H2_H_blibli.ses

alors que je souhaiterais
H1;5;...
H2;5;...

Le code souhaité est toujours H puis un chiffre de 1 à 9
H1, H2, H3, ...H9

Vouyez-vous une solution ?

Merci mille fois d'avance
Configuration: Windows XP Internet Explorer 6.0

6 réponses

  1. Modérateur
    Salut,

    Essaies ça :
    sed "s#\(..\)/\(.[^H]*_\)\([^H]*H.\)\(.*\)#\3;5;\2\3\4#" 
    Mais bon par rapport à ton précédent post y'a pas mal de changement et je ne suis pas sûr que ce soit ça que tu veuilles ;-(
    0
    1. Merci Jipicy,

      Ce que je souhaite, c'est
      blablabla_H1_blibli => H1
      blabla_00_H2_blibli =>H2 (il peut y avoir 2 caractères entre _)
      blabla_H3_blibli_Hebdo =>H3 (il peut y avoir plusieurs _H)
      en revanche, il ne peut y avoir qu'un seul _H suivi d'un chiffre

      Merci
      0
      1. Modérateur
        jp@MDK:~/tmpfs ssh$ cat plop
        ../sessions/02 - Selection/Nom_fichier_H1_blabla.ses
        ../camp/01 - Loisir/AutreNom_00_blabla_H2_H_blibli.ses
        
        jp@MDK:~/tmpfs ssh$ sed "s#\(..\)/\(.[^H]*_\)\([^H]*H.\)\(.*\)#\3;5;\2\3\4#" plop
        H1;5;sessions/02 - Selection/Nom_fichier_H1_blabla.ses
        H2;5;camp/01 - Loisir/AutreNom_00_blabla_H2_H_blibli.ses
        
        jp@MDK:~/tmpfs ssh$

        0
        1. Ca marche pour la plupart des lignes (90%), mais j'ai encore quelques erreurs :

          00;5;camp/00 - Admin/SEGM GOOD ACCO_00_000_5CW_G_0089_H1_GOOD ACCOUNTS.ses
          MONTHS;5;sessions/02 - Selection/Create DSN_MONTHSINBOOKS_PL_H1_DSN_MONTHSINBOOKS_PL.ses
          ../sessions/02 - Selection/Create ATM SHOP sns_H1_ATM_SHOP_transp.ses
          ../sessions/02 - Selection/Create OTB BASH 120_H1_OTB BASH 120.ses
          ../sessions/01 - Rules/Rules BASH DIRE_H2_Rules BASH DIRE.ses
          ../sessions/01 - Rules/Rules BASH LC_H2_Flow Rules BASH LC.ses
          ../sessions/01 - Rules/Rules CHARGE LC_H2_Rules Charge LC.ses
          ../sessions/02 - Selection/Create BASH transpactions_H4_BASH_transp_LST12mnth.ses

          Merci
          0
          1. Modérateur
            Et comme ça :
            sed "s#\(..\)/\(.*_\)\(H[0-9]\)\(.*\)#\3;5;\2\3\4#"
            Si ça merdoie encore un peu sur certaines lignes, il me faut une copie de ces lignes dans leur état original.
            0
            1. Je ne vais pas t'embéter plus, ca marche pour toutes les lignes sauf le 00.
              Mais je vais changer le nom du fichier comme ça on sera tranquille.
              C'est super sympa, merci encore.
              0