IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Besoin d'aide pour transformer un fichier texte.


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Besoin d'aide pour transformer un fichier texte.
    Bonjour,

    Je suis en actuellement en stage et je me retrouve à devoir transformer un fichier config de firewall en un fichier dans le genre du fichier /etc/passwd.

    Avec un dessin, je voudrais transformer ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        edit "printer"
            set uuid blablabla
            set comment "Imprimante"
            set subnet 10.42.19.194 255.255.255.255
        next
        edit "coucoucestmoi"
            set uuid bruhbruh
            set comment "interco"
            set associated-interface "Interco-vélo"
            set subnet 11.42.88.145 255.255.255.255
        next
    en ça :
    printer;10.42.19.194/32;;;Imprimante;
    coucoucestmoi;11.42.88.145/32;Interco-vélo;;interco;

    soit le modèle suivant :
    nom;IP;interface associée;tag (il y en a de temps en temps);commentaire;

    Et mon problème principal c'est que mon fichier fait beaucoup de lignes (plus de 4000) et que je préfèrerai éviter de passer par un fichier intermédiaire.
    Donc si vous avez une solution pour arriver à spliter en groupes de lignes en fonction d'un mot délimiteur ("next" me parais judicieux ici), je prends !

    Merci bien !

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Bonjour et Bienvenu,

    Qu'as-tu essayé déjà ?

    Ici, ton problème semble être:
    pour un bloc qui commence à edit et fini à next,
    créer la ligne:
    nom;IP;interface associée;tag;commentaire;.
    où:
    nom=valeur de ligne edit
    IP=valeur de ligne subnet (spécifier comment calculer le mask ??? )
    interface associée=???
    tag=???
    commentaire=???

    En répondant déjà a ces questions, tu pourras plus facilement voir comment faire et on pourra certainement mieux t'aider...
    Cordialement.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour et merci,

    alors pour préciser :

    nom=valeur de ligne edit
    IP=valeur de ligne subnet (je chercherai plus tard pour calculer le masque, pour l'instant c'est suffisant de laisser @ip @mask)
    interface associée=un nom de vlan/un domaine
    tag=une agrégation de ports/utilisation de la règle (il y a plusieurs champs généralement)
    commentaire=une string

    Après, je n'ai pas besoin de beaucoup de rigueur, c'est pour me permettre de simplifier au maximum la config d'un (très) gros firewall, et de la rendre compréhensible et utilisable facilement.

    Merci bien =)

    EDIT :*

    J'ai essayé pas mal de trucs comme awk mais apparemment c'est du traitement ligne par ligne (ça doit être faisable mais j'ai du mal avec awk.
    En scriptant en bash aussi, mais je me suis retrouvé face au même problème à propos des lignes.

    Mais je pense bien que c'est faisable avec plusieurs méthodes, et je ne suis pas vraiment un codeur :p

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    Bonjour,

    le format du fichier est très abordable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ cat fichier.in 
        edit "print er"
            set uuid blablabla
            set comment "Impr imante"
            set subnet 10.42.19.194 255.255.255.255
        next
        edit "coucou cestmoi"
            set uuid bruhbruh
            set comment "inter c o"
            set associated-interface "Interco-vélo"
            set subnet 11.42.88.145 255.255.255.255
        next
    c'est pas super compliqué en bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ while read -r line; do case $line in edit*) nom=${line#*\"}; nom=${nom//\"/};; *uuid*) uuid=${line##* };; *comment*) comment=${line#*\"}; comment=${comment//\"/};; next) echo "$nom;$uuid;$comment;..."; esac; done < fichier.in 
    print er;blablabla;Impr imante;...
    coucou cestmoi;bruhbruh;inter c o;...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Ok merci bien, je vais essayer ce que t'as proposé. (Et de le comprendre surtout)

    EDIT : c'est bien ce que je cherchais, merci bien !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Générer un fichier word ou excel en php
    Par Taz_8626 dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 10/05/2011, 09h57
  2. Réponses: 1
    Dernier message: 12/04/2007, 11h30
  3. [Upload] besoin d'aide pour uploader un fichier xls
    Par scorpion.os dans le forum Langage
    Réponses: 5
    Dernier message: 07/02/2007, 14h59
  4. Réponses: 45
    Dernier message: 04/05/2006, 01h10
  5. Besoin d'aide pour recuperer les fichier d'un projet
    Par barthelv dans le forum Applications et environnements graphiques
    Réponses: 9
    Dernier message: 14/04/2006, 11h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo