OVH Cloud OVH Cloud

Matcher une expression...

13 réponses
Avatar
romain.daumont
Salut,

J'essaie d'extraire une mac adress dans un fichier dhcpd.conf, mais
les expressions regulières et moi... ça fait 5!
Bref, mon fichier est composé de la manière suivante :

host toto {
hardware ethernet 00:05:5b:22:55:96;
fixed-address 192.168.21.55;
}
host titi {
hardware ethernet 00:B0:DD:D7:FF:78;
fixed-address 192.168.21.56;
}
etc...

Dans ce cas, j'ai parsé le fichier à l'aide d'un "foreach" et d'un
tableau; chaque ligne du fichier est donc contenu dans une ligne du
tableau.
Je connais, par exemple, le host "titi" et je souhaite recuperer la
mac adress correspondante dans une variable quelconque...?

Si vous avez une idée, ça serait cool!

Merci

10 réponses

1 2
Avatar
kurtz le pirate
In article ,
(MaXX) wrote:

Salut,

J'essaie d'extraire une mac adress dans un fichier dhcpd.conf, mais
les expressions regulières et moi... ça fait 5!
Bref, mon fichier est composé de la manière suivante :

host toto {
hardware ethernet 00:05:5b:22:55:96;
fixed-address 192.168.21.55;
}
host titi {
hardware ethernet 00:B0:DD:D7:FF:78;
fixed-address 192.168.21.56;
}
etc...

Dans ce cas, j'ai parsé le fichier à l'aide d'un "foreach" et d'un
tableau; chaque ligne du fichier est donc contenu dans une ligne du
tableau.
Je connais, par exemple, le host "titi" et je souhaite recuperer la
mac adress correspondante dans une variable quelconque...?

Si vous avez une idée, ça serait cool!

Merci



bonjour,

débutant aussi en perl je dirais :

$macAddr =~ s/(d+:d+:d+:d+:d+:d+)//


Avatar
Jogo
Salut,

J'essaie d'extraire une mac adress dans un fichier dhcpd.conf, mais
les expressions regulières et moi... ça fait 5!


Pour matcher une adresse mac : /[da-f]{2}(:[da-f]{2}){5}/i
Ou bien (plus rapide) : /[da-fA-F]{2}(?::[da-fA-F]{2}){5}/

Dans ce cas, j'ai parsé le fichier à l'aide d'un "foreach" et d'un
tableau; chaque ligne du fichier est donc contenu dans une ligne du
tableau.


Attention, cela n'est pas une bonne méthode. Le tableau n'est pas
utilisable en l'état, il faudra de toute façon l'analyser ligne par ligne.
Donc autant analyser directement le fichier de manière sequentielle afin
d'en extraire les données utiles, et les stocker dans une structure plus
facilement utilisable par la suite. Quelque chose comme :

open FILE,"<$filename" or die "Impossible d'ouvrir $filename" ;
while (<FILE>)
{
...extraire les infos ici...
} ;
close FILE ;


Je connais, par exemple, le host "titi" et je souhaite recuperer la
mac adress correspondante dans une variable quelconque...?


Le mieux serait de construire une table de hashage dont les clefs sont le
noms d'hôte et les valeurs l'adresse max.


Voilà, ensuite tout dépend de ce que vous êtes venu chercher sur ce forum.
Si il s'agit d'avoir un script tout près, tout chaud, autant le dire
clairement. Si il s'agit d'apprendre à utiliser Perl, j'espère vous avoir
aidé.

Avatar
Benoit Izac
Bonjour,

le 11/04/2005 à 18:05, kurtz le pirate a écrit
dans le message :

[comment extraire une adresse MAC ?]


$macAddr =~ s/(d+:d+:d+:d+:d+:d+)//


je dirais plutôt :

$macAddr = $1 if m/((?:[[:xdigit:]]{2}:){5}[[:xdigit:]]{2})/

perldoc perlre

--
Benoit Izac


Avatar
Stephane TOUGARD
MaXX wrote:
Salut,

J'essaie d'extraire une mac adress dans un fichier dhcpd.conf, mais
les expressions regulières et moi... ça fait 5!
Bref, mon fichier est composé de la manière suivante :

host toto {
hardware ethernet 00:05:5b:22:55:96;
fixed-address 192.168.21.55;
}
host titi {
hardware ethernet 00:B0:DD:D7:FF:78;
fixed-address 192.168.21.56;
}
etc...

Dans ce cas, j'ai parsé le fichier à l'aide d'un "foreach" et d'un
tableau; chaque ligne du fichier est donc contenu dans une ligne du
tableau.
Je connais, par exemple, le host "titi" et je souhaite recuperer la
mac adress correspondante dans une variable quelconque...?


my $cond = 0;
my $mac = undef;
foreach my $line(@tab)
{
chomp($line);
$line =~ s/#.*$//;
if($line =~ /^host.*titi/) {
$cond = 1;
}
if($line =~ /^}/)
{
$cond = 0;
}
if($cond == 0
or $line =~ /^$/)
{
next;
}
if($cond =~ /hardware.*ethernet/)
{
$line =~ s/^ *//;
$line =~ s/^t*//;
$line =~ s/ */ /g;
my @tab = split(/ /,$line);
$mac = $tab[2];
$mac =~ s/;//g;
}
}


C'est une facon de faire, mais il y en a d'autres (c'est pas teste, faut
sans doute corriger un peu).

Stephane




Si vous avez une idée, ça serait cool!

Merci



--
http://www.sidafr.org
http://www.unices.org Les meilleurs modules de Perl
http://www.unices.org/photo/ Ma petite galerie a moi que j'ai

Avatar
DoMinix
MaXX wrote:
Salut,

J'essaie d'extraire une mac adress dans un fichier dhcpd.conf, mais
les expressions regulières et moi... ça fait 5!
Bref, mon fichier est composé de la manière suivante :

host toto {
hardware ethernet 00:05:5b:22:55:96;
fixed-address 192.168.21.55;
}
host titi {
hardware ethernet 00:B0:DD:D7:FF:78;
fixed-address 192.168.21.56;
}
etc...

Dans ce cas, j'ai parsé le fichier à l'aide d'un "foreach" et d'un
tableau; chaque ligne du fichier est donc contenu dans une ligne du
tableau.
Je connais, par exemple, le host "titi" et je souhaite recuperer la
mac adress correspondante dans une variable quelconque...?

Si vous avez une idée, ça serait cool!

Merci



cat dhcp.leases
host toto {
hardware ethernet 00:05:5b:22:55:96;
fixed-address 192.168.21.55;
}
host titi {
hardware ethernet 00:B0:DD:D7:FF:78;
fixed-address 192.168.21.56;
}


#perl -n00laF'host' -e 'for(grep(/titi/,@F))
{print $1 if m/((ww:){5}ww)/m}' dhcp.leases
00:B0:DD:D7:FF:78



--
dominix

Avatar
kurtz_le_pirate
"MaXX" a écrit dans le message de
news:
Salut,

J'essaie d'extraire une mac adress dans un fichier dhcpd.conf, mais
les expressions regulières et moi... ça fait 5!
Bref, mon fichier est composé de la manière suivante :

host toto {
hardware ethernet 00:05:5b:22:55:96;
fixed-address 192.168.21.55;
}
host titi {
hardware ethernet 00:B0:DD:D7:FF:78;
fixed-address 192.168.21.56;
}
etc...

Dans ce cas, j'ai parsé le fichier à l'aide d'un "foreach" et d'un
tableau; chaque ligne du fichier est donc contenu dans une ligne du
tableau.
Je connais, par exemple, le host "titi" et je souhaite recuperer la
mac adress correspondante dans une variable quelconque...?

Si vous avez une idée, ça serait cool!



ops... j'ai prépondu un peu vite sans réflechir. la nuit portant conseil je
dirais :
- caractères hexa : [0-9a-f]
- 1 ou 2 : [0-9a-f]{2}
- suivi par deux points : [0-9a-f]{2}:
- il y en a 5 : ([0-9a-f]{2}:){5}
- suivi par un ou deux caracteres hex : ([0-9a-f]{2}:){5}[0-9a-f]
- sans tenir compte de ma casse : ([0-9a-f]{2}){5}[0-9a-f]/i

c'est mieux comme ca ?

Avatar
romain.daumont
kurtz le pirate wrote in message news:...
In article ,
(MaXX) wrote:

Salut,

J'essaie d'extraire une mac adress dans un fichier dhcpd.conf, mais
les expressions regulières et moi... ça fait 5!
Bref, mon fichier est composé de la manière suivante :

host toto {
hardware ethernet 00:05:5b:22:55:96;
fixed-address 192.168.21.55;
}
host titi {
hardware ethernet 00:B0:DD:D7:FF:78;
fixed-address 192.168.21.56;
}
etc...

Dans ce cas, j'ai parsé le fichier à l'aide d'un "foreach" et d'un
tableau; chaque ligne du fichier est donc contenu dans une ligne du
tableau.
Je connais, par exemple, le host "titi" et je souhaite recuperer la
mac adress correspondante dans une variable quelconque...?

Si vous avez une idée, ça serait cool!

Merci



bonjour,

débutant aussi en perl je dirais :

$macAddr =~ s/(d+:d+:d+:d+:d+:d+)//


Merci pour le regex, j'ai pas encore testé mais il me semble pas mal!

En fait, je n'arrive pas à detecter le champ à extraire avec la bonne
info; cad detecter "hardware ethernet" et recuperer le champ
hexadecimal qui suit. Sachant biensur que je connais le "host toto"
par exemple...?



Avatar
DoMinix
kurtz_le_pirate wrote:
"MaXX" a écrit dans le message de
news:

Salut,

J'essaie d'extraire une mac adress dans un fichier dhcpd.conf, mais
les expressions regulières et moi... ça fait 5!
Bref, mon fichier est composé de la manière suivante :

host toto {
hardware ethernet 00:05:5b:22:55:96;
fixed-address 192.168.21.55;
}
host titi {
hardware ethernet 00:B0:DD:D7:FF:78;
fixed-address 192.168.21.56;
}
etc...

Dans ce cas, j'ai parsé le fichier à l'aide d'un "foreach" et d'un
tableau; chaque ligne du fichier est donc contenu dans une ligne du
tableau.
Je connais, par exemple, le host "titi" et je souhaite recuperer la
mac adress correspondante dans une variable quelconque...?

Si vous avez une idée, ça serait cool!




ops... j'ai prépondu un peu vite sans réflechir. la nuit portant conseil je
dirais :
- caractères hexa : [0-9a-f]
- 1 ou 2 : [0-9a-f]{2}
- suivi par deux points : [0-9a-f]{2}:
- il y en a 5 : ([0-9a-f]{2}:){5}
- suivi par un ou deux caracteres hex : ([0-9a-f]{2}:){5}[0-9a-f]


il en faut 2

- sans tenir compte de ma casse : ([0-9a-f]{2}){5}[0-9a-f]/i

c'est mieux comme ca ?



oui,
pour moi ca matche bien comme ca :
m/(([0-9a-f]{2}:){5}[0-9a-f]{2})/mi
^ avec ces parenthese en plus^ pour alimenter $1
et le /m pour multiligne.

sur ce, bien le bonsoir.

--
dominix


Avatar
romain.daumont
Stephane TOUGARD wrote in message news:...
MaXX wrote:
Salut,

J'essaie d'extraire une mac adress dans un fichier dhcpd.conf, mais
les expressions regulières et moi... ça fait 5!
Bref, mon fichier est composé de la manière suivante :

host toto {
hardware ethernet 00:05:5b:22:55:96;
fixed-address 192.168.21.55;
}
host titi {
hardware ethernet 00:B0:DD:D7:FF:78;
fixed-address 192.168.21.56;
}
etc...

Dans ce cas, j'ai parsé le fichier à l'aide d'un "foreach" et d'un
tableau; chaque ligne du fichier est donc contenu dans une ligne du
tableau.
Je connais, par exemple, le host "titi" et je souhaite recuperer la
mac adress correspondante dans une variable quelconque...?


my $cond = 0;
my $mac = undef;
foreach my $line(@tab)
{
chomp($line);
$line =~ s/#.*$//;
if($line =~ /^host.*titi/) {
$cond = 1;
}
if($line =~ /^}/)
{
$cond = 0;
}
if($cond == 0
or $line =~ /^$/)
{
next;
}
if($cond =~ /hardware.*ethernet/)
{
$line =~ s/^ *//;
$line =~ s/^t*//;
$line =~ s/ */ /g;
my @tab = split(/ /,$line);
$mac = $tab[2];
$mac =~ s/;//g;
}
}


C'est une facon de faire, mais il y en a d'autres (c'est pas teste, faut
sans doute corriger un peu).

Stephane




Si vous avez une idée, ça serait cool!

Merci




Re,

Je vais tester ton code. Merci pour ton aide


Avatar
romain.daumont
DoMinix wrote in message news:<425b58bf$0$27223$...
MaXX wrote:
Salut,

J'essaie d'extraire une mac adress dans un fichier dhcpd.conf, mais
les expressions regulières et moi... ça fait 5!
Bref, mon fichier est composé de la manière suivante :

host toto {
hardware ethernet 00:05:5b:22:55:96;
fixed-address 192.168.21.55;
}
host titi {
hardware ethernet 00:B0:DD:D7:FF:78;
fixed-address 192.168.21.56;
}
etc...

Dans ce cas, j'ai parsé le fichier à l'aide d'un "foreach" et d'un
tableau; chaque ligne du fichier est donc contenu dans une ligne du
tableau.
Je connais, par exemple, le host "titi" et je souhaite recuperer la
mac adress correspondante dans une variable quelconque...?

Si vous avez une idée, ça serait cool!

Merci



cat dhcp.leases
host toto {
hardware ethernet 00:05:5b:22:55:96;
fixed-address 192.168.21.55;
}
host titi {
hardware ethernet 00:B0:DD:D7:FF:78;
fixed-address 192.168.21.56;
}


#perl -n00laF'host' -e 'for(grep(/titi/,@F))
{print $1 if m/((ww:){5}ww)/m}' dhcp.leases
00:B0:DD:D7:FF:78


Chanmax! J'avoue c'est vraiment terrible!
Par contre, tu peux m'expliquer le "-n00laF'host' -e"?


1 2