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...?
Il n'a pas vraiment précisé quel perl il utilisait, si c'est 5.005, il n'a pas xdigit :-)
Les perfectionnistes feront un test sur la version de Perl et incluront les deux solutions dans leur script.
-- Encyclopédie libre, gratuite, à laquelle tout le monde peut collaborer: http://fr.wikipedia.org/ Chercher dans les documents sous licence Creative Commons: http://search.yahoo.com/cc
Mathieu Arnold <mat+club@mat.cc> writes:
Il n'a pas vraiment précisé quel perl il utilisait, si c'est 5.005,
il n'a pas xdigit :-)
Les perfectionnistes feront un test sur la version de Perl et
incluront les deux solutions dans leur script.
--
Encyclopédie libre, gratuite, à laquelle tout le monde peut
collaborer: http://fr.wikipedia.org/
Chercher dans les documents sous licence Creative Commons:
http://search.yahoo.com/cc
Il n'a pas vraiment précisé quel perl il utilisait, si c'est 5.005, il n'a pas xdigit :-)
Les perfectionnistes feront un test sur la version de Perl et incluront les deux solutions dans leur script.
-- Encyclopédie libre, gratuite, à laquelle tout le monde peut collaborer: http://fr.wikipedia.org/ Chercher dans les documents sous licence Creative Commons: http://search.yahoo.com/cc
Benoit Izac
Bonjour,
le 11/04/2005 à 23:13, Mathieu Arnold a écrit dans le message <425ae868$0$15286$ :
$macAddr = $1 if m/((?:[[:xdigit:]]{2}:){5}[[:xdigit:]]{2})/
perldoc perlre
Il n'a pas vraiment précisé quel perl il utilisait, si c'est 5.005, il n'a pas xdigit :-)
C'est juste mais on peut facilement utiliser [0-9a-fA-F] à la place.
En fait le vrai problème c'est plus de savoir comment on écrit une adresse MAC dans le fichier de configuration ; avec mon dhcpd, on peut écrire « aa:bb: » qui équivaut à « aa:bb:00:00:00:00 », ou encore « 1:2:3:4:5:6 » qui équivaut à « 01:02:03:04:05:06 ».
La regexp serait donc plutôt : $1 if m/((?:[0-9a-f]{1,2}:){1,5}(?:[0-9a-f]{1,2})?)/i
On doit pouvoir faire plus compliqué si l'on veut obtenir l'équivalent du parcer de dhcpd ;-)
-- Benoit Izac
Bonjour,
le 11/04/2005 à 23:13, Mathieu Arnold a écrit
dans le message <425ae868$0$15286$7a628cd7@news.club-internet.fr> :
$macAddr = $1 if m/((?:[[:xdigit:]]{2}:){5}[[:xdigit:]]{2})/
perldoc perlre
Il n'a pas vraiment précisé quel perl il utilisait, si c'est 5.005, il
n'a pas xdigit :-)
C'est juste mais on peut facilement utiliser [0-9a-fA-F] à la place.
En fait le vrai problème c'est plus de savoir comment on écrit une
adresse MAC dans le fichier de configuration ; avec mon dhcpd, on peut
écrire « aa:bb: » qui équivaut à « aa:bb:00:00:00:00 », ou encore
« 1:2:3:4:5:6 » qui équivaut à « 01:02:03:04:05:06 ».
La regexp serait donc plutôt :
$1 if m/((?:[0-9a-f]{1,2}:){1,5}(?:[0-9a-f]{1,2})?)/i
On doit pouvoir faire plus compliqué si l'on veut obtenir l'équivalent
du parcer de dhcpd ;-)
le 11/04/2005 à 23:13, Mathieu Arnold a écrit dans le message <425ae868$0$15286$ :
$macAddr = $1 if m/((?:[[:xdigit:]]{2}:){5}[[:xdigit:]]{2})/
perldoc perlre
Il n'a pas vraiment précisé quel perl il utilisait, si c'est 5.005, il n'a pas xdigit :-)
C'est juste mais on peut facilement utiliser [0-9a-fA-F] à la place.
En fait le vrai problème c'est plus de savoir comment on écrit une adresse MAC dans le fichier de configuration ; avec mon dhcpd, on peut écrire « aa:bb: » qui équivaut à « aa:bb:00:00:00:00 », ou encore « 1:2:3:4:5:6 » qui équivaut à « 01:02:03:04:05:06 ».
La regexp serait donc plutôt : $1 if m/((?:[0-9a-f]{1,2}:){1,5}(?:[0-9a-f]{1,2})?)/i
On doit pouvoir faire plus compliqué si l'on veut obtenir l'équivalent du parcer de dhcpd ;-)
-- Benoit Izac
DoMinix
MaXX wrote:
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"?
premierement observer comment Perl voit la chose
perl -MOÞparse -n00laF'host' -e 'for(grep(/titi/,@F)){print $1 if m/((ww:){5}ww)/mi}'
BEGIN { $/ = ""; $ = "nn"; } LINE: while (defined($_ = <ARGV>)) { chomp $_; our(@F) = split(/host/, $_, 0); foreach $_ (grep /titi/, @F) { print $1 if /((ww:){5}ww)/im; } } -e syntax OK
ensuite lire "perldoc perlrun" le principe est simple et revient souvent dans les unilignes. -n reitere le corp du programme (en argument sur la ligne de commande) pour toute les lignes du fichier pass2 sur le ligne de cmd. -0 (zero) definit le caratere du separateur de ligne en octal, donc -00 designe un separateur nul (pas de separateur = mode aspiration) -a autosplite les lignes analisé dans @F F (apres -a) definit le pattern du split (ici host)
donc tout les element separé par le mot host sont mis dans des case d'un tableau @F, sur ce tableau on fait un grep du host que l'on cherche qui retourne un element 'titi { hardware ethernet 00:B0:DD:D7:FF:78; fixed-address 192.168.21.56; '
il faut a ce moment la une simple regexp qui ne tiendra pas compte des retour chariot d'ou le /m a la fin, et l'expression matché si elle est mise entre parentheses et automatiquement mise dans $1 (et $2 si il y a une deuxieme parenthese ...)
c'est plus clair maintenant ? :)
-- dominix
MaXX wrote:
DoMinix <dominix@despammed.com> wrote in message news:<425b58bf$0$27223$636a15ce@news.free.fr>...
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"?
premierement observer comment Perl voit la chose
perl -MOÞparse -n00laF'host' -e
'for(grep(/titi/,@F)){print $1 if m/((ww:){5}ww)/mi}'
BEGIN { $/ = ""; $ = "nn"; }
LINE: while (defined($_ = <ARGV>)) {
chomp $_;
our(@F) = split(/host/, $_, 0);
foreach $_ (grep /titi/, @F) {
print $1 if /((ww:){5}ww)/im;
}
}
-e syntax OK
ensuite lire "perldoc perlrun"
le principe est simple et revient souvent dans les unilignes.
-n reitere le corp du programme (en argument sur la ligne de commande)
pour toute les lignes du fichier pass2 sur le ligne de cmd.
-0 (zero) definit le caratere du separateur de ligne en octal, donc
-00 designe un separateur nul (pas de separateur = mode aspiration)
-a autosplite les lignes analisé dans @F
F (apres -a) definit le pattern du split (ici host)
donc tout les element separé par le mot host sont mis dans des case d'un
tableau @F, sur ce tableau on fait un grep du host que l'on cherche
qui retourne un element 'titi {
hardware ethernet 00:B0:DD:D7:FF:78;
fixed-address 192.168.21.56;
'
il faut a ce moment la une simple regexp qui ne tiendra pas compte des
retour chariot d'ou le /m a la fin, et l'expression matché si elle est
mise entre parentheses et automatiquement mise dans $1 (et $2 si il y a
une deuxieme parenthese ...)
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"?
premierement observer comment Perl voit la chose
perl -MOÞparse -n00laF'host' -e 'for(grep(/titi/,@F)){print $1 if m/((ww:){5}ww)/mi}'
BEGIN { $/ = ""; $ = "nn"; } LINE: while (defined($_ = <ARGV>)) { chomp $_; our(@F) = split(/host/, $_, 0); foreach $_ (grep /titi/, @F) { print $1 if /((ww:){5}ww)/im; } } -e syntax OK
ensuite lire "perldoc perlrun" le principe est simple et revient souvent dans les unilignes. -n reitere le corp du programme (en argument sur la ligne de commande) pour toute les lignes du fichier pass2 sur le ligne de cmd. -0 (zero) definit le caratere du separateur de ligne en octal, donc -00 designe un separateur nul (pas de separateur = mode aspiration) -a autosplite les lignes analisé dans @F F (apres -a) definit le pattern du split (ici host)
donc tout les element separé par le mot host sont mis dans des case d'un tableau @F, sur ce tableau on fait un grep du host que l'on cherche qui retourne un element 'titi { hardware ethernet 00:B0:DD:D7:FF:78; fixed-address 192.168.21.56; '
il faut a ce moment la une simple regexp qui ne tiendra pas compte des retour chariot d'ou le /m a la fin, et l'expression matché si elle est mise entre parentheses et automatiquement mise dans $1 (et $2 si il y a une deuxieme parenthese ...)