#1 Le 22/02/2014, à 23:36
- warezeux
Exporter le contenu d'un fichier vers un autre
Bonjour,
Je réalise une ptit script pour projet mais je bloqué sur une petite partie.
Je voudrais en fonction d'une recherche saisie au préalable (ex:toto) recherché dans le fichier hosts.cfg (nagios)
et pouvoir exporter tout le contenu en gras
[color=g]define host{
host_name toto
use generic-host
alias ServeurWeb
address X.X.X.X
_HOST-ID 17
}[/color]
vers un autre fichier sachant que cette operation pour ce repeter plusieurs et qu'il faudrais que cela s'ajoute l'un en dessous de l'autre ...
Règle N° 1 : Si tout va bien, ne touchez à rien
Allo ! Je n'arrive plus à rentrer dans mon ordinateur "Etes vous sur(e) d'avoir ouvert la porte ? "
Un geek ne dit pas "Fait Chier", mais fichier !
Si vous avez Windows et qu'il n'a jamais eu de bug, c'est que vous venez de l'avoir.
Hors ligne
#2 Le 23/02/2014, à 02:35
- Postmortem
Re : Exporter le contenu d'un fichier vers un autre
Salut,
host=toto
sed -n '/\[color=g\]/{:a;N;/\[\/color\]/!ba;/host_name '"$host"'/p}' fichier >> nouveau_fichier
Cette commande va chercher dans fichier toutes les lignes entre [color=g] et [/color] ; si dans ces lignes on trouve host_name toto, ça les rajoute dans nouveau_fichier.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#3 Le 23/02/2014, à 11:06
- warezeux
Re : Exporter le contenu d'un fichier vers un autre
Salut !
Super pour la commande !
La partie à exporter correspond plustot à sa :
define host{
host_name toto
use generic-host
alias ServeurWeb
address X.X.X.X
_HOST-ID 17
}
Du coup la commande est différent ?
Règle N° 1 : Si tout va bien, ne touchez à rien
Allo ! Je n'arrive plus à rentrer dans mon ordinateur "Etes vous sur(e) d'avoir ouvert la porte ? "
Un geek ne dit pas "Fait Chier", mais fichier !
Si vous avez Windows et qu'il n'a jamais eu de bug, c'est que vous venez de l'avoir.
Hors ligne
#4 Le 23/02/2014, à 11:29
- Postmortem
Re : Exporter le contenu d'un fichier vers un autre
Salut,
Si j'ai bien compris, [color=g] et [/color], ça n'apparaît pas dans ton fichier d'origine ?
Ou alors, ces 2 balises sont bien présentes et tu ne veux pas les avoir dans le fichier de destination ?
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#5 Le 23/02/2014, à 11:46
- warezeux
Re : Exporter le contenu d'un fichier vers un autre
Salut,
Enfaite en écrivant ce post je me suis trompé j'ai ajouté les balises [color=g] et [/color] par erreur ... et donc oui ils n'apparaissent pas dans le fichier d'origine
Règle N° 1 : Si tout va bien, ne touchez à rien
Allo ! Je n'arrive plus à rentrer dans mon ordinateur "Etes vous sur(e) d'avoir ouvert la porte ? "
Un geek ne dit pas "Fait Chier", mais fichier !
Si vous avez Windows et qu'il n'a jamais eu de bug, c'est que vous venez de l'avoir.
Hors ligne
#6 Le 23/02/2014, à 12:15
- Postmortem
Re : Exporter le contenu d'un fichier vers un autre
host=toto
sed -n '/define host{/{:a;N;/}/!ba;/host_name '"$host"'/p}' fichier >> nouveau_fichier
Dernière modification par Postmortem (Le 23/02/2014, à 12:18)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#7 Le 23/02/2014, à 13:05
- warezeux
Re : Exporter le contenu d'un fichier vers un autre
J'ai remplacé "fichier" part le chemin source et "nouveau_fichier" par le chemin de destination néanmoins dans le fichier de destination il reste vide ... Lorsque je lance le script aucun message d'erreur n'est retourné ...
Règle N° 1 : Si tout va bien, ne touchez à rien
Allo ! Je n'arrive plus à rentrer dans mon ordinateur "Etes vous sur(e) d'avoir ouvert la porte ? "
Un geek ne dit pas "Fait Chier", mais fichier !
Si vous avez Windows et qu'il n'a jamais eu de bug, c'est que vous venez de l'avoir.
Hors ligne
#8 Le 23/02/2014, à 13:35
- Postmortem
Re : Exporter le contenu d'un fichier vers un autre
Peux tu montrer exactement quelles sont les commandes que tu lances ?
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#9 Le 23/02/2014, à 13:39
- warezeux
Re : Exporter le contenu d'un fichier vers un autre
Tout mon script ce déroule super bien jusqu'à la commande ci-dessous qui ne renvoi aucun contenu dans le /home/nagios/nagios/$nom/hosts.cfg
sed -n '/define host{/{:a;N;/}/!ba;/host_name '"$nom"'/p}' /etc/nagios/hosts.cfg >> /home/nagios/nagios/$nom/hosts.cfg
Règle N° 1 : Si tout va bien, ne touchez à rien
Allo ! Je n'arrive plus à rentrer dans mon ordinateur "Etes vous sur(e) d'avoir ouvert la porte ? "
Un geek ne dit pas "Fait Chier", mais fichier !
Si vous avez Windows et qu'il n'a jamais eu de bug, c'est que vous venez de l'avoir.
Hors ligne
#10 Le 23/02/2014, à 13:42
- Postmortem
Re : Exporter le contenu d'un fichier vers un autre
Que vaut la variable $nom ?
Et peux-tu montrer le ou les blocs qui devrait être extrait pour cette variable $nom ?
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#11 Le 23/02/2014, à 13:42
- warezeux
Re : Exporter le contenu d'un fichier vers un autre
!/bin/bash
#-------------------------------------------------------------------------
# Creation du dossier client "/home/nagios/$nom"
#
# "$nom" etant le nom du client
#-------------------------------------------------------------------------
echo -----------------------------------------
echo "Saisir le nom du dossier client a creer"
echo -----------------------------------------
read nom
echo ------------------------------------
echo "Dossier client créee sous le $nom"
echo ------------------------------------
cd /home/nagios/nagios
mkdir $nom
echo ---------------------------------------------------------
echo "nagios.cfg & hosts.cfg sont copiés dans le dossier $nom"
echo ---------------------------------------------------------
cp -r /home/nagios/config/nagios.cfg /home/nagios/nagios/$nom
cp -r /home/nagios/config/hosts.cfg /home/nagios/nagios/$nom
echo ----------------------
echo "Nagmap $nom est crée"
echo ----------------------
mkdir /var/www/nagmap/$nom
cp -r /var/www/nagmap/config/* /var/www/nagmap/$nom
echo --------------------------------------------------------------------------------
echo "La modification du chemin /home/nagios/nagios/$client/config.php est effectuee"
echo --------------------------------------------------------------------------------
cd /var/www/nagmap
for file in /var/www/nagmap/$nom/config.php
do
sed -i -e "5s/client/$nom/g" "$file"
done
echo -----------------------------------------------------------------------------------------------
echo "La modification du chemin dans nagios.cfg /home/nagios/nagios/$nom/hosts.cfg est effectuee"
echo -----------------------------------------------------------------------------------------------
for file in /home/nagios/nagios/$nom/nagios.cfg
do
sed -i -e "17s/client/$nom/g" "$file"
done
echo -----------------------------------------------------------------------------------------------
echo "config apache $nom est cree"
echo -----------------------------------------------------------------------------------------------
cp -r /etc/httpd/conf.d/osmap.conf /etc/httpd/conf.d/$nom.conf
for file in /etc/httpd/conf.d/$nom.conf
do
sed -i -e "2s/osmap1/$nom/g" "$file"
sed -i -e "4s/client/$nom/g" "$file"
done
/etc/init.d/httpd restart
sed -n '/define host{/{:a;N;/}/!ba;/host_name '"$nom"'/p}' /etc/nagios/hosts.cfg >> /home/nagios/nagios/$nom/hosts.cfg
Règle N° 1 : Si tout va bien, ne touchez à rien
Allo ! Je n'arrive plus à rentrer dans mon ordinateur "Etes vous sur(e) d'avoir ouvert la porte ? "
Un geek ne dit pas "Fait Chier", mais fichier !
Si vous avez Windows et qu'il n'a jamais eu de bug, c'est que vous venez de l'avoir.
Hors ligne
#12 Le 23/02/2014, à 13:50
- Postmortem
Re : Exporter le contenu d'un fichier vers un autre
J'ai posé 2 questions juste avant ton dernier message.
Donne un exemple de valeur pour $nom et le bloc correspondant dans /etc/nagios/hosts.cfg
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#13 Le 23/02/2014, à 14:42
- warezeux
Re : Exporter le contenu d'un fichier vers un autre
Par exemple $nom "Centreon-Server"
define host{
host_name Centreon-Server
use generic-host
alias Monitoring Server
address 127.0.0.1
_HOST_ID 14
#location 0
hostgroups Linux_Servers
notes latlng : 45.7640430, 4.8356590
}
Règle N° 1 : Si tout va bien, ne touchez à rien
Allo ! Je n'arrive plus à rentrer dans mon ordinateur "Etes vous sur(e) d'avoir ouvert la porte ? "
Un geek ne dit pas "Fait Chier", mais fichier !
Si vous avez Windows et qu'il n'a jamais eu de bug, c'est que vous venez de l'avoir.
Hors ligne
#14 Le 23/02/2014, à 17:24
- pingouinux
Re : Exporter le contenu d'un fichier vers un autre
Bonjour,
C'est parce que, contrairement à l'exemple donné par warezeux en #3, il y a plusieurs espaces entre hostname et le nom.
Il suffit de modifier la commande de Postmortem #6 en conséquence :
sed -n '/define host{/{:a;N;/}/!ba;/host_name \+'"$host"'/p}' fichier >> nouveau_fichier
Hors ligne
#15 Le 23/02/2014, à 17:44
- warezeux
Re : Exporter le contenu d'un fichier vers un autre
Le fichier de destination ce rempli toujours pas
sed -n '/define host{/{:a;N;/}/!ba;/host_name \+'"$nom"'/p}' /etc/nagios/hosts.cfg >> /home/nagios/nagios/$nom/hosts.cfg
Règle N° 1 : Si tout va bien, ne touchez à rien
Allo ! Je n'arrive plus à rentrer dans mon ordinateur "Etes vous sur(e) d'avoir ouvert la porte ? "
Un geek ne dit pas "Fait Chier", mais fichier !
Si vous avez Windows et qu'il n'a jamais eu de bug, c'est que vous venez de l'avoir.
Hors ligne
#16 Le 23/02/2014, à 18:52
- Postmortem
Re : Exporter le contenu d'un fichier vers un autre
C'est que c'est peut-être des tabulations au lieu de plusieurs espaces (ou un mix des 2) :
sed -n '/define host{/{:a;N;/}/!ba;/host_name[\t ]\+'"$host"'/p}' fichier >> nouveau_fichier
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#17 Le 23/02/2014, à 19:06
- warezeux
Re : Exporter le contenu d'un fichier vers un autre
Magnifique !
Un grand merci à vous deux Postmortem & pingouinux !
Règle N° 1 : Si tout va bien, ne touchez à rien
Allo ! Je n'arrive plus à rentrer dans mon ordinateur "Etes vous sur(e) d'avoir ouvert la porte ? "
Un geek ne dit pas "Fait Chier", mais fichier !
Si vous avez Windows et qu'il n'a jamais eu de bug, c'est que vous venez de l'avoir.
Hors ligne
#18 Le 23/02/2014, à 19:07
- warezeux
Re : Exporter le contenu d'un fichier vers un autre
Néanmoins pouvez-vous me décrire la commande ?
Règle N° 1 : Si tout va bien, ne touchez à rien
Allo ! Je n'arrive plus à rentrer dans mon ordinateur "Etes vous sur(e) d'avoir ouvert la porte ? "
Un geek ne dit pas "Fait Chier", mais fichier !
Si vous avez Windows et qu'il n'a jamais eu de bug, c'est que vous venez de l'avoir.
Hors ligne
#19 Le 23/02/2014, à 20:00
- Postmortem
Re : Exporter le contenu d'un fichier vers un autre
On va mettre la commande sous forme plus claire déjà, ça te permettra de mieux comprendre :
sed -n '/define host{/ {
:a
N
/}/! ba
/host_name[\t ]\+'"$host"'/ p
}' fichier >> nouveau_fichier
Déjà, l'option -n dit à sed de n'afficher quelque chose que quand on lui demande.
/define host{/ : la commande qui suit n'est exécutée que si la ligne contient define host{. Dans notre cas, ce n'est pas une commande mais un groupe de commande qui est entre les accolades rouges.
:a : c'est une étiquette vers laquelle on peut sauter.
N : ça dit à sed d'ajouter la ligne suivante dans son espace de travail. Normalement, sed met une ligne dans son espace de travail, y applique les commandes puis vide son espace de travail. Puis il passe à la ligne suivante, la met dans son espace de travail etc... N permet donc d'avoir plusieurs lignes en même temps dans l'espace de travail.
/}/! ba : si l'espace de travail ne contient pas }, on saute vers l'étiquette :a
/host_name[\t ]\+'"$host"'/p : si l'espace de travail contient host_name suivi d'une ou plusieurs tabulations/espaces, suivi du nom d'host, on affiche l'espace de travail.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#20 Le 23/02/2014, à 21:11
- warezeux
Re : Exporter le contenu d'un fichier vers un autre
Super ! merci beaucoup !
Règle N° 1 : Si tout va bien, ne touchez à rien
Allo ! Je n'arrive plus à rentrer dans mon ordinateur "Etes vous sur(e) d'avoir ouvert la porte ? "
Un geek ne dit pas "Fait Chier", mais fichier !
Si vous avez Windows et qu'il n'a jamais eu de bug, c'est que vous venez de l'avoir.
Hors ligne