Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 hmm

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 ! smile smile


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 ! smile smile


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