Bash sed

pecom Messages postés 33 Statut Membre -  
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   -
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 <[email protected]>
cas 2 : From: ([email protected]) Toto

Dans les 2 cas, après traitement, je dois obtenir :
Paul:[email protected]
Toto:[email protected]

Alors j'espere que quelqun va pouvoir répondre à ma question ! merci !
A voir également:

3 réponses

dna.factory Messages postés 19833 Date d'inscription   Statut Modérateur Dernière intervention   1 621
 
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 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 497
 
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 <[email protected]>
From: ([email protected]) 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:[email protected]
Toto:[email protected]

$

:-))
0
Pecom
 
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 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 497
 
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 18808 Date d'inscription   Statut Contributeur Dernière intervention   5 652
 
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 <[email protected]>
From: ([email protected]) 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:[email protected]
Toto:[email protected]
$
0
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 497
 
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 18808 Date d'inscription   Statut Contributeur Dernière intervention   5 652
 
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 <[email protected]>
From: ([email protected]) 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:[email protected]
Toto Cutugno:[email protected]
0
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 497
 
Merci ;-))
0
dubcek Messages postés 18808 Date d'inscription   Statut Contributeur Dernière intervention   5 652
 
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:[email protected]
Toto Cutugno:[email protected]
$ 
$ 
0
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 497
 
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