[SHELL] isoler 2 valeurs dans un fichier

Résolu/Fermé
meelooz - 25 août 2010 à 14:15
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 25 août 2010 à 15:11
Bonjour,

comment pourrais-je isoler 2 valeurs dans un fichier de configuration?

exemple:

fichier de base:

lease 192.168.1.2 {
starts 3 2010/08/18 13:18:56;
ends 3 2010/08/18 13:28:56;
tstp 3 2010/08/18 13:28:56;
cltt 3 2010/08/18 13:18:56;
binding state free;
hardware ethernet f4:cf:44:9b:51:b6;
uid "\001\364\316F\232Q\266";

lease 192.168.1.3 {
starts 3 2010/08/18 13:18:56;
ends 3 2010/08/18 13:28:56;
tstp 3 2010/08/18 13:28:56;
cltt 3 2010/08/18 13:18:56;
binding state free;
hardware ethernet f4:ce:36:8c:de:b6;
uid "\001\345\306A\252Q\279";

j'aimerais avoir en sortie:

192.168.1.2 f4:cf:44:9b:51:b6
192.168.1.3 f4:ce:36:8c:de:b6

isoler l'ip ou l'@MAC j'y arrive mais pas en gardant le couple ip/MAC, je tourne un peu en rond et je ne maitrise pas assez sed pour m'en sortir sans un petit coup de main.

merci à vous

A voir également:

6 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
25 août 2010 à 15:03
[jp@MDK-2010 tmpfs]$ cat plop
lease 192.168.1.2 {
starts 3 2010/08/18 13:18:56;
ends 3 2010/08/18 13:28:56;
tstp 3 2010/08/18 13:28:56;
cltt 3 2010/08/18 13:18:56;
binding state free;
hardware ethernet f4:cf:44:9b:51:b6;
uid "\001\364\316F\232Q\266";

lease 192.168.1.3 {
starts 3 2010/08/18 13:18:56;
ends 3 2010/08/18 13:28:56;
tstp 3 2010/08/18 13:28:56;
cltt 3 2010/08/18 13:18:56;
binding state free;
hardware ethernet f4:ce:36:8c:de:b6;
uid "\001\345\306A\252Q\279";

[jp@MDK-2010 tmpfs]$ egrep 'lease|ethernet' plop  | egrep -o '([0-9]{1,3}\.){3}[0-9]{1}|([[:alnum:]]{2}:){5}[[:alnum:]]{2}' | sed 'N;s/\n/ /'
192.168.1.2 f4:cf:44:9b:51:b6
192.168.1.3 f4:ce:36:8c:de:b6

[jp@MDK-2010 tmpfs]$

;-))
1
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
25 août 2010 à 15:05
hello
avec awk
$ awk -F"[ ;]*" '/^lease/ {l=$2} ; /^hardware/ {print l, $3}' fichier
192.168.1.2 f4:cf:44:9b:51:b6
192.168.1.3 f4:ce:36:8c:de:b6
$ 
1
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
25 août 2010 à 14:21
Salut,

Pour gagner du temps, quel est actuellement la sortie que tu obtiens ?
0
Bonjour jipicy,

pour l'instant avec grep et awk j'obtiens toutes les IP ou toutes les @MAC, je n'arrive pas isoler le couple, dès le premier grep c'est fichu forcement, jessaie en lisant de la doc sur sed de supprimer toutes les lignes ne commençant pas par lease ou hardware.

cat dhcpd.leases | sed '/^lease\|^hardware/!d' mais ça ne marche pas, je dois mal m'y prendre, je continue à chercher de mon coté, merci en tout cas de t'interesser à mon problème :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bon j'avance, avec : cat dhcpd.leases | grep -E '(lease|hardware)' j'arrive deja a isoler les 2 lignes, j'ai une sortie du genre :

lease 192.168.2.3 {
hardware ethernet 00:1c:f0:f9:93:28;
lease 192.168.5.20 {
hardware ethernet 00:19:db:e7:6e:25;
0
wow !!! merci jipicy!

moi j'étais un train de bricoler un truc super crade genre :

sed -e "s/hardware\ ethernet//" -e "s/lease\ //" -e "s/\ {//" -e "s/;//" pour avoir mes 2 valeurs meme pas sur la meme ligne.

la partie : egrep -o '([0-9]{1,3}\.){3}[0-9]{1}|([[:alnum:]]{2}:){5}[[:alnum:]]{2}'

j'ai pas du tout compris, je vais lire le man parceque j'etais tres loin du compte.

En tout cas un grand merci, le resultat est là et j'ai appris des choses.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
25 août 2010 à 15:11
La solution de dubcek est bien plus simple et aérée ;-))

La partie "regex" pour l'IP est expliquée ici, c'est un peu le même principe pour la partie @MAC ;-))
0