Bonjour, j'ai un probleme avec sed.
J'ai un script qui fais un requette snmp:
snmpwalk -c `community` -v 1 monequip ipNetToMediaPhysAddress
et qui me retourne:
IP-MIB::ipNetToMediaPhysAddress.1.10.10.1.1 = STRING: 0:50:53:e7:9b:ff
IP-MIB::ipNetToMediaPhysAddress.1.10.10.1.5 = STRING: 0:0:c:7:ac:1
IP-MIB::ipNetToMediaPhysAddress.1.10.10.1.15 = STRING: 0:50:80:48:7a:80
IP-MIB::ipNetToMediaPhysAddress.1.193.34.12.45 = STRING: 0:0:c:7:ac:1
que je transforme en
10.10.1.1 :0:50:53:e7:9b:ff:
10.10.1.5 :0:0:c:7:ac:1:
10.10.1.15 :0:50:80:48:7a:80:
193.34.12.45 :0:0:c:7:ac:1:
avec la commande:
snmpwalk -c `community` -v 1 monequip ipNetToMediaPhysAddress | awk -F "." '{print $3"."$4"."$5"."$6":"}' | sed "s/ = STRING: / :/g"
j'ai fait un script qui le retourne les mac adresses formatté,
mais c'est vraiment crade.
Le probleme, est que les mac addresse comme celle la:
0:0:c:7:ac:1 devrait ressembler a ça
00:00:0c:07:ac:01
Quand le charactere est inferieur à "10", il ne l'affiche que sur un charactere...
Cette solution est tres laide je trouve...
snmpwalk -c $community -v 1 monequip ipNetToMediaPhysAddress | awk -F "." '{print $3"."$4"."$5"."$6":"}' | sed 's/ = STRING: / :/g' | sed 's/:0:/:00:/g' | sed 's/:1:/:01:/g' | sed 's/:2:/:02:/g' | sed 's/:3:/:03:/g' | sed 's/:4:/:04:/g' | sed 's/:5:/:05:/g' | sed 's/:6:/:06:/g' | sed 's/:7:/:07:/g'... etc
Existe t'il quelque chose de plus propre en bash...?
Merci d'avance
# printf
Posté par netsurfeur . Évalué à 3.
snmpwalk -c $community -v 1 monequip ipNetToMediaPhysAddress | awk -F "." '{printf "%02d.%02d.%02d.%02d:\n",$3,$4,$5,$6}' | sed 's/ = STRING: / :/g'
PS: On peut utiliser un seul sed avec l'option -e:
sed -e 's/ = STRING: / :/g' -e 's/:0:/:00:/g' -e 's/:1:/:01:/g' -e 's/:2:/:02:/g' -e 's/:3:/:03:/g'
au lieu de
sed 's/ = STRING: / :/g' | sed 's/:0:/:00:/g' | sed 's/:1:/:01:/g' | sed 's/:2:/:02:/g' | sed 's/:3:/:03:/g'
[^] # Re: printf
Posté par kowalsky . Évalué à 2.
Il me retourne que l'adresse ip...
c'est quoi le \n...?
[^] # Re: printf
Posté par netsurfeur . Évalué à 2.
Comme je n'ai pas ton équipement, j'ai cru qu'adresse MAC était traitée par le print dans awk ce qui n'est manifestement pas le cas. J'ai répondu plus bas pour le reformatage de l'adresse MAC avec sed.
\n siginifie "newline" (passage à la ligne suivante). printf est utile pour faire des impressions plus sophistiquées que print (voir 'man awk')
[^] # Re: printf
Posté par kowalsky . Évalué à 2.
# nouveau probleme
Posté par kowalsky . Évalué à 2.
la ligne...
echo :0:0:c:7:ac:1: | sed 's/:0:/:00:/g'
devient
:00:0:c:7:ac:1: et non
:00:00:c:7:ac:1: comme ça devrait etre avec le
flag g dans la commande sed...
[^] # Re: nouveau probleme
Posté par netsurfeur . Évalué à 3.
Pour traiter tous les chiffres, tu peux utiliser la commande:
echo :0:0:c:7:ac:1: | sed 's/:\([0-9a-f]\):/:0\1:/g' | sed 's/:\([0-9a-f]\):/:0\1:/g'
qui donne comme résultat:
:00:00:0c:07:ac:01:
Il faut répéter la commande sed car chaque caractère en entrée n'est traité qu'une fois. Si on prend la chaine de caractères :0:1:, le premier traitement prend bien en compte les trois caractères :0: mais il ne reste ensuite que 1: qui ne peut pas être reconnu.
Le premier sed va donc traiter au mieux un octet sur deux et le second les autres.
[^] # Re: nouveau probleme
Posté par Ramón Perez (site web personnel) . Évalué à 1.
echo :0:0:c:7:ac:1: | sed ':a;s/:\([0-9a-f]\):/:0\1:/g;ta'
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.