Bash sed

Fermé
pecom Messages postés 33 Date d'inscription jeudi 23 septembre 2004 Statut Membre Dernière intervention 31 mai 2013 - 9 nov. 2011 à 06:48
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 9 nov. 2011 à 14:50
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 !

3 réponses

dna.factory Messages postés 25506 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 20 janvier 2025 1 613
9 nov. 2011 à 07:22
personnellement, 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)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 420
9 nov. 2011 à 07:36
Salut,

$ 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

$

:-))
0
Merci de ta reponce ! Malheureusement je ne peux utiliser awk pour l'instant .... Contrainte d'ecole ... Pourrais tu un peu detailler les etapes que tu as ecrites sa m'aiderais beaucoup pour comprendre puisque je commence a programmer... En plus que sed a l'air assée complexe ...

Merci !
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 420
9 nov. 2011 à 10:50
Contrainte 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
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
9 nov. 2011 à 10:00
hello
$ 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
$
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 420
9 nov. 2011 à 10:06
Salut,

Si le nom est composé (Jean Paul ou Toto Titi), ce qui arrive souvent dans les noms qui apparaissent en regard des adresses mail, ça foire ;-\
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
9 nov. 2011 à 12:41
effectivement
$ 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
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 420
9 nov. 2011 à 13:26
Merci ;-))
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
9 nov. 2011 à 13:41
on 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
$ 
$ 
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 420
9 nov. 2011 à 13:45
on ne peut plus modifier ses posts ?
Non. On est revenu à l'ancienne vu les abus répétés avec cette fonction.
On peut néanmoins éditer son post pendant 3 minutes.
0