Bash sed
pecom
Messages postés
33
Statut
Membre
-
zipe31 Messages postés 38797 Statut Contributeur -
zipe31 Messages postés 38797 Statut Contributeur -
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 !
A voir également:
- Sed -e bash
- É majuscule - Guide
- Bingo bash free - Télécharger - Divers Jeux
- E exposant clavier ✓ - Forum Windows
- E/s en série intel - Forum Carte graphique
- Bash addition ✓ - Forum Shell
3 réponses
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)
(soit précédé d'un sed pour changer les ( en < et les > en ) ou inversement, soit avec de la conditionnelle)
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
$
:-))
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
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
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
$
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
on ne peut plus modifier ses posts ?
version optimisée
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
$
$