Bonjour,
je suis un debutant en shell.
Dans un fichier qui contient plusieurs bloc define , comme un fichier nagios par exemple , je veux recuperer un bloc bien precis en ne sachant que l'IP ( j'ai mes raisons :) ). J'ai donc cherche sur la toile et j'ai trouve du code interessant. Apres quelques modifs et tests , j'ai ca comme code.
awk 'BEGIN{RS="}"} /define/ && /mon_IP/ { print $0 "}" }' mon_fichier
Mais voila , y a juste un truc qui m'ennui beaucoup.
Si je cherche une ip du genre xxx.xxx.xxx.5 , il va me donner tout les bloc correspondant aux iPs xxx.xxx.xxx.5 , xxx.xxx.xxx.50 , xxx.xxx.xxx.51 , xxx.xxx.xxx.52 , etc ....
Comment puis je faire pour qui ne me cherche que l'IP que je desire et seulement celle la?
Merci d'avance.
# Exemple du fichier d'entrée
Posté par mekare . Évalué à 2.
Si celui-ci ne contient que des IP et que tu souhaites récupérer tout ce qui se termine en .5 alors il faut faire ça :
cat tonfichier |awk -F"." '{ if ($4 == 5) print $0}'
Sinon, merci de nous donner un exemple du fichier d'entrée
[^] # Re: Exemple du fichier d'entrée
Posté par furanku . Évalué à 1.
Voici un exemple de fichier. j'ai mis des IP locale , mais je travaille sur des IP global. Et ici j'ai mis que 3 define host , mais dans un meme fichier en principe , j'en ai plusieurs dizaines , voir plus.
Et donc je recherche a recuperer le define host qui correspond a 192.168.0.5 (dans cet exemple) sans me payer les autres. Et biensur je ne veux pas utiliser d'Autres arguments que l'IP
#cat mon_fichier.cfg
define host{
host_name db.masociete.com
alias db.masociete
address 192.168.0.5
use generic-host
contact_groups mail-report
parents switch-S50
}
define host{
host_name ns.masociete.com
alias ns.masociete.com
address 192.168.0.55
use generic-host
contact_groups mail-report
parents switch-S50
}
define host{
host_name db2.masociete.com
alias db.masociete
address 192.168.0.52
use generic-host
contact_groups mail-report
parents switch-S50
}
define hostgroup{
hostgroup_name switch-S5_host
alias switch-S5_host
members db.masociete.com,ns.masociete.com,db2.masociete.com
}
[^] # Re: Exemple du fichier d'entrée
Posté par furanku . Évalué à 1.
awk 'BEGIN{RS="}"} /define/ && /'192.168.0.5'/ { print $0 "}" }' mon_fichier.cfg
Et bien je recupere les 3 blocs dont les address sont 192.168.0.5 , 192.168.0.55 et 192.168.0.52.
[^] # Re: Exemple du fichier d'entrée
Posté par Obsidian . Évalué à 2.
# Je propose :
Posté par Obsidian . Évalué à 2.
En considérant bien sûr qu'il n'y a pas de zéro non-significatif à gauche de chaque nombre ...
[^] # Re: Je propose :
Posté par frederic blain . Évalué à 1.
awk 'BEGIN{RS="}"} /define/ && /192.168.0.5[^0-9]/ { print $0 "}" }' mon_fichier
[^] # Re: Je propose :
Posté par furanku . Évalué à 1.
Merci beaucoup. Vous m'enlevez tous une grosse epine du pied , comme on dit.
awk 'BEGIN{RS="}"} /define/ && /192.168.0.5[^0-9]/ { print $0 "}" }' mon_fichier =====> ca marche
awk 'BEGIN{RS="}"} /define/ && /192.168.0.5\n]/ { print $0 "}" }' mon_fichier =====> marche aussi
Quand a SED , je vais essayer plus tard .
Merci a TOUS .
[^] # Re: Je propose :
Posté par Étienne . Évalué à 3.
awk 'BEGIN{RS="}"} /define/ && /192.168.0.5\>/ { print $0 "}" }' mon_fichier
le \> correspond à "fin de mot"
# je tente :
Posté par snt . Évalué à 1.
[^] # Re: je tente :
Posté par totof2000 . Évalué à 2.
[^] # Re: je tente :
Posté par snt . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.