Bash sed
Bonjour,
Je me demandais s'il étais possible d'obtenir le résultat que je cherche avec la commande SED.
je lis un fichier ligne par ligne
lorsque je suis sur la ligne qui contient From:
alors j'ai 2 cas de possible
cas 1 : From: Paul <paul@paul.com>
cas 2 : From: (toto@toto.com) Toto
Dans les 2 cas, après traitement, je dois obtenir :
Paul:paul@paul.com
Toto:toto@toto.com
Alors j'espere que quelqun va pouvoir répondre à ma question ! merci !
Je me demandais s'il étais possible d'obtenir le résultat que je cherche avec la commande SED.
je lis un fichier ligne par ligne
lorsque je suis sur la ligne qui contient From:
alors j'ai 2 cas de possible
cas 1 : From: Paul <paul@paul.com>
cas 2 : From: (toto@toto.com) Toto
Dans les 2 cas, après traitement, je dois obtenir :
Paul:paul@paul.com
Toto:toto@toto.com
Alors j'espere que quelqun va pouvoir répondre à ma question ! merci !
3 réponses
-
Modérateurpersonnellement, j'utiliserais en awk
(soit précédé d'un sed pour changer les ( en < et les > en ) ou inversement, soit avec de la conditionnelle) -
ContributeurSalut,
$ cat plop je lis un fichier ligne par ligne lorsque je suis sur la ligne qui contient From: alors j'ai 2 cas de possible From: Paul <paul@paul.com> From: (toto@toto.com) Toto $ cat fich.sed /^From/{ /</{ s/.*: \|>//g s/ </:/ } /(/{ s/.*(// s/\(.*\)) \(.*\)/\2:\1/ } } $ sed -f fich.sed plop je lis un fichier ligne par ligne lorsque je suis sur la ligne qui contient From: alors j'ai 2 cas de possible Paul:paul@paul.com Toto:toto@toto.com $
:-))
-
-
ContributeurContrainte d'ecole ...
Arf ;-(((
Plutôt que de t'expliquer, essaie de comprendre par toi même, ça te sera plus bénéfique, tout est dans la FAQ :
Sed - Introduction à SED - Part I
Sed - Introduction à SED - Part II
Sed - Introduction à SED - Part III
-
-
Contributeurhello
$ cat a1 Je lis un fichier ligne par ligne lorsque je suis sur la ligne qui contient From: alors j'ai 2 cas de possible From: Paul <paul@paul.com> From: (toto@toto.com) Toto $ $ awk -F"[<>:() ]" '/^From:.*\(/ {print $6 ":" $4 ; next} /^From.*</ {print $3 ":" $5 ; next} {print}' a1 Je lis un fichier ligne par ligne lorsque je suis sur la ligne qui contient From: alors j'ai 2 cas de possible Paul:paul@paul.com Toto:toto@toto.com $-
-
Contributeureffectivement
$ cat a1 Je lis un fichier ligne par ligne lorsque je suis sur la ligne qui contient From: alors j'ai 2 cas de possible From: Paul le poulpe <paul@paul.com> From: (toto@toto.com) Toto Cutugno $ $ awk -F"[<>:()]" '/^From:.*\(/ {gsub("^ | $", "",$4);print $4 ":" $3 ; next} /^From.*</ {gsub("^ | $", "", $2) ; print $2 ":" $3 ; next} {print}' a1 Je lis un fichier ligne par ligne lorsque je suis sur la ligne qui contient From: alors j'ai 2 cas de possible Paul le poulpe:paul@paul.com Toto Cutugno:toto@toto.com -
-
Contributeuron ne peut plus modifier ses posts ?
version optimisée$ awk -F"[<>:()]" '/^From:/ {if($0 ~ "[(]"){c1=4 ; c2=3} else {c1=2 ; c2=3} ; gsub("^ | $", "",$c1);print $c1 ":" $c2 ; next} {print}' a1 Je lis un fichier ligne par ligne lorsque je suis sur la ligne qui contient From: alors j'ai 2 cas de possible Paul le poulpe:paul@paul.com Toto Cutugno:toto@toto.com $ $ -
-