Comparaison entre paragraphes

Résolu
alami123 -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Salut,

Débutante en Shell, j'aimerais bien votre aide.

Je dois faire un script qui va parcourir un fichier de configuration et voir si mes paramètres sont corrects en se basant sur un ensemble de paramètre.

ex :
pour mon fichier de configuration dns named.conf
le script doit aller lire la configuration de la zone "home4" et confirmer qu'elle est correcte en faisant la comparaison avec la directive suivante :

#configuration home4 :
zone "home4.fr" {
type master;
file "/etc/bind/zones/db.home3.fr";
allow-transfer {213.186.3.120;};
};

avez- vous une idée sur la commande que je peux utiliser pour cette comparaison ?

merci par avance pour votre aide

5 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 942
     
    Le plus simple c'est d'écrire un script awk ou chaque ligne correspond à un "état" d'une machine à état.
    https://fr.wikipedia.org/wiki/Automate_fini

    Petite illustration si tu ne sais pas ce que c'est. Supposons que tu cherches un paragraphe qui fait 3 lignes. La première correspond à l'état 1, la seconde à l'état 2, la troisième à l'état 3. Au début du script tu pars à l'état 0 (tu peux mémoriser l'état courant dans une variable globale à ton script).

    Si tu trouves une ligne qui correspond à la ligne 1 et si tu es à l'état 0, tu passes à l'état 1.
    Sinon si tu trouves une ligne qui correspond à la ligne 2 et si tu es à l'état 1, tu passes à l'état 2.
    Sinon si tu trouves une ligne qui correspond à la ligne 3 et si tu es à l'état 2, tu passes à l'état 3, alors tu as trouvé le paragraphe recherché.
    Dans tous les autres cas tu retombes à l'état 0.

    Ça doit ressembler à un truc comme ça :

    BEGIN {
    ok = 0;
    state = 0;
    }

    /ligne1/ && (state == 0) { state = 1; }
    /ligne2/ && (state == 1) { state = 2; }
    /ligne3/ && (state == 2) { ok = 1; }
    { state = 0; }

    END {
    if (ok == 1) {
    print "OK"
    } else {
    print "NOK"
    }
    }

    Ou sinon tu peux installer pcregrep comme suggéré ici :
    https://stackoverflow.com/questions/14350856/can-awk-patterns-match-multiple-lines

    Bonne chance
    1
  2. alami123
     
    je me suis peut être mal exprimé.
    je cherche à parser mon fichier de configuration et comparer avec la chaine ci-dessous.

    comment je peux faire ça avec un awk ?

    NB : ce n'est qu'un exemple, je dois faire la mm chose sur d'autres serveurs, apache, tomcat, et postfix...
    0
  3. alami123
     
    Merci mamiemando pour la réponse

    c'est très utile : )
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 942
     
    Je t'en prie :) Est-ce que ton problème est résolu ?

    Si oui, tu peux le basculer en tant que tel à l'aide du lien "marquer comme résolu" au niveau de ton premier message.

    Bonne soirée !
    0