J'écris un script en bash et j'ai besoin de retrouver dans la sortie d'un
autre script uniquement les "mots" qui sont des adresses MAC. (Pour
simuler, on peut essayer sur la sortie de ifconfig et récuperer les
HWaddr )
J'ai pensé à utiliser grep et une expression régulière mais je n'arrive
vraiment pas a construire cette expression régulière.
J'aurais bien voulu apprendre à construire des expressions régulières mais
je n'ai trouver aucun howto français ou anglais réellement complet (ou
plutôt suffisamment explicite pour quelqu'un comme moi) et la page de man
de grep ne m'a pas aidé.
Merci de votre aide.
--
@+
Doug [Linux user #307925] - Slackware RuleZ ;-)
[Pourquoi t'es qui, qu'est ce que tu fais par où ?]
-- Pour me contacter enlever no-spam (2X) --
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Stephane Chazelas
On Mon, 09 Jan 2006 11:58:27 +0100, Doug713705 wrote:
Bonjour à toutes, tous,
J'écris un script en bash et j'ai besoin de retrouver dans la sortie d'un autre script uniquement les "mots" qui sont des adresses MAC. (Pour simuler, on peut essayer sur la sortie de ifconfig et récuperer les HWaddr )
J'ai pensé à utiliser grep et une expression régulière mais je n'arrive vraiment pas a construire cette expression régulière. [...]
Avec perl:
ifconfig -a | perl -lne ' print for ( /(b(?:[[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}b)/ )'
regarde du coté de man/info regex/regexp (les pages de Solaris sont assez bien faites). Il doit y avoir de tonnes de tutoriels sur le web aussi.
perldoc perlre
pour perl.
-- Stephane
On Mon, 09 Jan 2006 11:58:27 +0100, Doug713705 wrote:
Bonjour à toutes, tous,
J'écris un script en bash et j'ai besoin de retrouver dans la sortie d'un
autre script uniquement les "mots" qui sont des adresses MAC. (Pour
simuler, on peut essayer sur la sortie de ifconfig et récuperer les
HWaddr )
J'ai pensé à utiliser grep et une expression régulière mais je n'arrive
vraiment pas a construire cette expression régulière.
[...]
Avec perl:
ifconfig -a | perl -lne '
print for (
/(b(?:[[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}b)/
)'
On Mon, 09 Jan 2006 11:58:27 +0100, Doug713705 wrote:
Bonjour à toutes, tous,
J'écris un script en bash et j'ai besoin de retrouver dans la sortie d'un autre script uniquement les "mots" qui sont des adresses MAC. (Pour simuler, on peut essayer sur la sortie de ifconfig et récuperer les HWaddr )
J'ai pensé à utiliser grep et une expression régulière mais je n'arrive vraiment pas a construire cette expression régulière. [...]
Avec perl:
ifconfig -a | perl -lne ' print for ( /(b(?:[[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}b)/ )'
Merci, c'est exactement ce qu'il me fallait mais je n'arrive pas encore à comprendre comment tu as fais pour arriver à une telle expression.
Une variante facile à (re)lire, et compatible quelque soit l'outils
([0-9abcdef]{2}:){5}[0-9abcdef]{2}
Je vais analyser tout ça et lire, lire....
Se lit comme - une suite de deux chiffres (0 à 9) et/ou lettres 'abcdef' (hexa) - suivi de deux points (:) - répété 5 fois - et encore une fois une suite de deux chiffres/lettres
Il existe un tas de manière de bâtir une RegEx, mais toujours privilégier celle qui n'utilise aucune spécificité OS et celle qui est le plus lisible pour assurer une maintenance facile :-)
Le Lundi 9 Janvier 2006 12:32, Stephane Chazelas s'est exprimé de la sorte
sur fr.comp.os.unix :
Merci, c'est exactement ce qu'il me fallait mais je n'arrive pas encore à
comprendre comment tu as fais pour arriver à une telle expression.
Une variante facile à (re)lire, et compatible quelque soit l'outils
([0-9abcdef]{2}:){5}[0-9abcdef]{2}
Je vais analyser tout ça et lire, lire....
Se lit comme
- une suite de deux chiffres (0 à 9) et/ou lettres 'abcdef' (hexa)
- suivi de deux points (:)
- répété 5 fois
- et encore une fois une suite de deux chiffres/lettres
Il existe un tas de manière de bâtir une RegEx, mais toujours privilégier
celle qui n'utilise aucune spécificité OS et celle qui est le plus lisible
pour assurer une maintenance facile :-)
Merci, c'est exactement ce qu'il me fallait mais je n'arrive pas encore à comprendre comment tu as fais pour arriver à une telle expression.
Une variante facile à (re)lire, et compatible quelque soit l'outils
([0-9abcdef]{2}:){5}[0-9abcdef]{2}
Je vais analyser tout ça et lire, lire....
Se lit comme - une suite de deux chiffres (0 à 9) et/ou lettres 'abcdef' (hexa) - suivi de deux points (:) - répété 5 fois - et encore une fois une suite de deux chiffres/lettres
Il existe un tas de manière de bâtir une RegEx, mais toujours privilégier celle qui n'utilise aucune spécificité OS et celle qui est le plus lisible pour assurer une maintenance facile :-)
Stephane Chazelas
On Mon, 9 Jan 2006 13:30:55 +0100, mdnews wrote:
Le Lundi 9 Janvier 2006 12:32, Stephane Chazelas s'est exprimé de la sorte sur fr.comp.os.unix :
Merci, c'est exactement ce qu'il me fallait mais je n'arrive pas encore à comprendre comment tu as fais pour arriver à une telle expression.
Une variante facile à (re)lire, et compatible quelque soit l'outils
([0-9abcdef]{2}:){5}[0-9abcdef]{2}
Ce n'est pas compatible quelque soit l'outil. Il faut que l'outil reconnaisse les expressions rationnelles etendues. Et il manque les A-F. A noter que awk est censé implementer les ERE mais certains comme GNU awk ne reconnaissent pas les {...} (a moins de passer l'option appropriee avec gawk)
([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2} est une ERE POSIX. Ce qui n'est pas POSIX est -w et -o.
[:xdigit:] serait plutot equivalent a 0-9a-fA-F
Je vais analyser tout ça et lire, lire....
Se lit comme - une suite de deux chiffres (0 à 9) et/ou lettres 'abcdef' (hexa) - suivi de deux points (:) - répété 5 fois - et encore une fois une suite de deux chiffres/lettres
Il existe un tas de manière de bâtir une RegEx, mais toujours privilégier celle qui n'utilise aucune spécificité OS et celle qui est le plus lisible pour assurer une maintenance facile :-)
En BRE (comme pour sed)
([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}
-- Stephane
On Mon, 9 Jan 2006 13:30:55 +0100, mdnews wrote:
Le Lundi 9 Janvier 2006 12:32, Stephane Chazelas s'est exprimé de la sorte
sur fr.comp.os.unix :
Merci, c'est exactement ce qu'il me fallait mais je n'arrive pas encore à
comprendre comment tu as fais pour arriver à une telle expression.
Une variante facile à (re)lire, et compatible quelque soit l'outils
([0-9abcdef]{2}:){5}[0-9abcdef]{2}
Ce n'est pas compatible quelque soit l'outil. Il faut que
l'outil reconnaisse les expressions rationnelles etendues. Et il
manque les A-F. A noter que awk est censé implementer les ERE
mais certains comme GNU awk ne reconnaissent pas les {...} (a
moins de passer l'option appropriee avec gawk)
([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2} est une ERE POSIX. Ce
qui n'est pas POSIX est -w et -o.
[:xdigit:] serait plutot equivalent a 0-9a-fA-F
Je vais analyser tout ça et lire, lire....
Se lit comme
- une suite de deux chiffres (0 à 9) et/ou lettres 'abcdef' (hexa)
- suivi de deux points (:)
- répété 5 fois
- et encore une fois une suite de deux chiffres/lettres
Il existe un tas de manière de bâtir une RegEx, mais toujours privilégier
celle qui n'utilise aucune spécificité OS et celle qui est le plus lisible
pour assurer une maintenance facile :-)
Merci, c'est exactement ce qu'il me fallait mais je n'arrive pas encore à comprendre comment tu as fais pour arriver à une telle expression.
Une variante facile à (re)lire, et compatible quelque soit l'outils
([0-9abcdef]{2}:){5}[0-9abcdef]{2}
Ce n'est pas compatible quelque soit l'outil. Il faut que l'outil reconnaisse les expressions rationnelles etendues. Et il manque les A-F. A noter que awk est censé implementer les ERE mais certains comme GNU awk ne reconnaissent pas les {...} (a moins de passer l'option appropriee avec gawk)
([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2} est une ERE POSIX. Ce qui n'est pas POSIX est -w et -o.
[:xdigit:] serait plutot equivalent a 0-9a-fA-F
Je vais analyser tout ça et lire, lire....
Se lit comme - une suite de deux chiffres (0 à 9) et/ou lettres 'abcdef' (hexa) - suivi de deux points (:) - répété 5 fois - et encore une fois une suite de deux chiffres/lettres
Il existe un tas de manière de bâtir une RegEx, mais toujours privilégier celle qui n'utilise aucune spécificité OS et celle qui est le plus lisible pour assurer une maintenance facile :-)
En BRE (comme pour sed)
([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}
-- Stephane
Vincent Lefevre
Dans l'article , Stephane Chazelas écrit:
On Mon, 9 Jan 2006 13:30:55 +0100, mdnews wrote:
Une variante facile à (re)lire, et compatible quelque soit l'outils
([0-9abcdef]{2}:){5}[0-9abcdef]{2}
Ce n'est pas compatible quelque soit l'outil. Il faut que l'outil reconnaisse les expressions rationnelles etendues. Et il manque les A-F.
D'autre part, est-on sûr que [0-9] est équivalent à [0123456789] dans toute locale?