#26 Le 25/01/2016, à 11:05
- Alcatraz62
Re : Récuperation complexe d'informations (grep,awk,cut,sed,find)
avec:
#!/bin/bash
nomhost='SW_test'
echo "$nomhost"
fichier=/srv/eyesofnetwork/nagios/etc/objects/hosts.cfg
infohost=$(sed -n '/define host {/{h;b};/}/!{H;b};H;x;/\<host_name \+'"$nomhost"'\>/p' "$fichier")
echo infohost="$infohost"=
nomparent=$(awk '/\<parents\>/{print $2}' <<< "$infohost")
echo nomparent="$nomparent"=
j'obtiens:
SW_test
infohost==
nomparent==
Je comprend vraiment plus rien, la programmation, les scripts et tout c'est pas fait pour moi
Hors ligne
#27 Le 25/01/2016, à 11:52
- Watael
Re : Récuperation complexe d'informations (grep,awk,cut,sed,find)
je propose une solution peut-être un peu plus "plan-plan", qui énonce clairement ce qu'on cherche :
$ cat fichierHosts
define host {
host_name SW_nom (le nom que je connais a la base)
addresse 1.0.0.0
parents FW_SW_nom
....
...
}
define host {
host_name TW_nom (le nom que je connais a la base)
addresse 2.0.0.0
parents FW_TW_nom
....
...
}
define host {
host_name UW_nom (le nom que je connais a la base)
addresse 3.0.0.0
parents FW_UW_nom
....
...
}
$ host="SW_nom"
$
$ IFS='|' read hote adresse parent < <(sed -n '/define host/{:c;N;/}/! bc; /'"$host"'/{s/.*host_name[^ ]* \([^ ]*\).*addresse[^ ]* \([^\n]*\)\n.*parents[^ ]* \([^\n]*\).*/\1|\2|\3/;p}}' fichierHosts )
$
$ echo "hote = $hote; adresse = $adresse; parent = $parent"
hote = SW_nom; adresse = 1.0.0.0; parent = FW_SW_nom
$
Dernière modification par Watael (Le 25/01/2016, à 12:04)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#28 Le 25/01/2016, à 11:52
- pingouinux
Re : Récuperation complexe d'informations (grep,awk,cut,sed,find)
S'il y a des tabulations (qu'on ne récupère généralement pas avec un copier-coller), il faut faire ceci :
infohost=$(sed -n '/define host {/{h;b};/}/!{H;b};H;x;/\<host_name\s\+'"$nomhost"'\>/p' "$fichier")
Hors ligne
#29 Le 25/01/2016, à 12:00
- Alcatraz62
Re : Récuperation complexe d'informations (grep,awk,cut,sed,find)
C'est bon ça fonctionne avec la ligne que tu viens de m'envoyer !!
Merci beaucoup beaucoup pour toute ton aide et le temps que tu as passé !:)
donc voici mon script:
#!/bin/bash
nomhost='SW_test'
echo "$nomhost"
fichier=/srv/eyesofnetwork/nagios/etc/objects/hosts.cfg
infohost=$(sed -n '/define host {/{h;b};/}/!{H;b};H;x;/\<host_name\s\+'"$nomhost"'\>/p' "$fichier")
echo "$infohost"
lignep=$(grep parents <<< "$infohost")
echo "$lignep"
nomparent=$(sed '/parents/,/\}/ !d ; /parents/ !d ; s/.*\ //' <<< "$lignep")
echo "$nomparent"
infoparent=$(sed -n '/define host {/{h;b};/}/!{H;b};H;x;/\<host_name\s\+'"$nomparent"'\>/p' "$fichier")
echo "$infoparent"
lignea=$(grep address <<< "$infoparent")
echo "$lignea"
adr=$(sed '/address/,/\}/ !d ; /address/ !d ; s/.*\ //' <<< "$lignea")
echo "$adr"
Et j'obtiens bien l'adresse du parent de l'hôte que je connais au début !
Merciiiiiii !
Hors ligne