OVH Cloud OVH Cloud

SH GREP SED AND CO

5 réponses
Avatar
Tonio
Salut,

je m'enerve un peu sur une broutille... je ne sais pas si c'est le bon
groupe ici pour poster ça. SI ce n'est pas le cas, merci de m'excuser...


exemple :

fichier :

blablablabla
From: "blablablabla" <blabla@bla.com>
blablablablablabla


> cat fichier | grep -E "[a-zA-Z0-9]+@[a-zA-Z0-9]+"
> From: "blabla bla @ bla" <blabla@bla.com>

mais je voudrais récupérer plus précisement blabla@bla.com uniquement

(donc en gros je voudrais récupérer dans un fichier ce qui correspond à une
expression régulière, et uniquement le texte qui correspond, pas la ligne)

Ca me parait pas compliqué, mais je bloque...

Merci pour l'aide...

AM

5 réponses

Avatar
Vincent

cat fichier | grep -E "[a-zA-Z0-9]+@[a-zA-Z0-9]+"
From: "blabla bla @ bla"


mais je voudrais récupérer plus précisement uniquement


Faut faire ça avec awk.

Vincent


Avatar
Jacques Caron
Salut,

On Thu, 2 Sep 2004 16:35:40 +0200, Tonio wrote:

cat fichier | grep -E "[a-zA-Z0-9]+@[a-zA-Z0-9]+"
From: "blabla bla @ bla"



Déjà, ta regex est pas terrible (il manque tout plein de caractères), mais
bon.

mais je voudrais récupérer plus précisement uniquement


tu peux faire un pipe dans sed (genre sed -e 's/^From: ".*" <//' -e
's/>$//', mais ça risque de dépendre beaucoup du format de la ligne en
question, faut voir s'il est vraiment aussi fixe que tu le penses). Sinon
pipe dans sed -e 's/regex qui matche ce que tu veux/&/' ça le fait aussi.

Tu peux aussi faire ça en perl:

#!/usr/bin/perl -w
use strict;
while (<>)
{
if (/(ta regex de la mort qui tue qui matche ce que tu veux)/)
{
print "$1n";
}
}

[pas testé, mais bon ça devrait le faire]

Mais à mon avis t'as du boulot sur la regex ;->

Jacques.
--
Interactive Media Factory
Création, développement et hébergement
de services interactifs: SMS, SMS+, Audiotel...
http://www.imfeurope.com/


Avatar
Stephane Chazelas
2004-09-2, 16:35(+02), Tonio:
[...]
cat fichier | grep -E "[a-zA-Z0-9]+@[a-zA-Z0-9]+"



"cat", c'est pour concatener, je vois pas trop ce que ca vient
faire la (www.ling.helsinki.fi/~reriksso/unix/award.html)

From: "blabla bla @ bla"


mais je voudrais récupérer plus précisement uniquement
[...]


Les versions recentes du GNU grep ont l'option "-o".

Tu peux aussi faire:

tr -cs '' < fichier | grep -Ex '[^@]+@[^@]+'

Voir http://www.livejournal.com/users/bluesmoon/22103.html
pour une regexp plus precise...

--
Stephane


Avatar
Marc Dilasser
Bonsoir,

Tonio wrote:
Salut,

je m'enerve un peu sur une broutille... je ne sais pas si c'est le bon
groupe ici pour poster ça. SI ce n'est pas le cas, merci de m'excuser...


exemple :

fichier :

blablablabla
From: "blablablabla"
blablablablablabla



cat fichier | grep -E "[a-zA-Z0-9]+@[a-zA-Z0-9]+"
From: "blabla bla @ bla"



mais je voudrais récupérer plus précisement uniquement

(donc en gros je voudrais récupérer dans un fichier ce qui correspond à une
expression régulière, et uniquement le texte qui correspond, pas la ligne)

Ca me parait pas compliqué, mais je bloque...



Je propose ça, tu vois si ça te convient :

grep "<.*@.*>" fichier | sed -e "s/(.*)(<.*@.*).*/2/"

Marc


Avatar
manu
Tonio wrote:

blablablabla
From: "blablablabla"
blablablablablabla
(snip)

mais je voudrais récupérer plus précisement uniquement


awk -F'[><]' '/^From: /{print $2}'

--
Emmanuel Dreyfus
Publicité subliminale: achetez ce livre!
http://www.eyrolles.com/Informatique/Livre/9782212114638/livre-bsd.php