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

Linux Discussion :

[Bash] Comparaison ligne regexp


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2008
    Messages : 56
    Par défaut [Bash] Comparaison ligne regexp
    Bonjour, ca fait un petit moment que j'ai pas touché au bash et manque de pot me revoilà obligé de l'utiliser

    Je bloque sur un truc surement tout con, mais j'dois l'etre en ne trouvant pas la réponse.

    Je pars du fichier dhcpd.conf que je copie dans /tmp/ , ensuite je boucle dessus pour le lire, et j'veux réaliser un test si ma ligne comme par "(tabulation)host", si c'ets le cas j'veux en retirer le nom du pc juste après le mot host.

    Voici ce que j'ai écrit et qui ne fonctionne pas biensur j'ai testé pleins de versions différentes avant de poster ici, et je n'en mettrais qu'une pour vous donner une idée de ce que je cherche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #!/bin/bash
    cat /etc/dhcp3/dhcpd.conf > /tmp/dhcpd.conf
    fich=/tmp/dhcpd.conf
    while read ligne
    do
    if [ "$ligne" = "/^(tabulation)host/" ]
    then nommachine = `cat $ligne | awk -F" " ' {print $2}`
    echo $nommachine
    fi
    done < $fich
    Ca merde au niveau du if, et je suis trop rouillé car je ne trouve pas la solution depuis 14h30 0_o

    Merci infiniment de me dérouiller euh me débloquer.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Peux-tu fournir le contenu de ton dhcpd.conf

    tu as fait un echo de ta ligne à chaque itération? Il me semble que les tabulations disparaissent.

  3. #3
    Membre très actif
    Avatar de FloMo
    Homme Profil pro
    Freelance iOS
    Inscrit en
    Juillet 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Freelance iOS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 726
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [...]
    echo -e "${ligne}" | grep -E "^(tabulation)host"
    if [ $? -eq 0 ]
    then
    [...]
    fi
    [...]
    Sinon, tu peux aussi faire un awk directement sur le fichier de configuration...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk '(/^\thost/) { print $2; }' /etc/dhcp3/dhcpd.conf

  4. #4
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    tu ne peux pas matcher une ER dans un if avec cette syntaxe.
    Essaie plutot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if [[ "$ligne" =~ <pattern> ]]; then
    ....
    fi

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par FloMo Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [...]
    echo -e "${ligne}" | grep -E "^(tabulation)host"
    if [ $? -eq 0 ]
    then
    [...]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    [...]
    if echo -e "$ligne" | grep -E "^(tabulation)host" 1>/dev/null
    then
    [...]
    Quand aux accolades ${ligne}, ce n'est réellement utile que pour lever une ambigüité (style echo "${prix}F" au lieu de echo "$prixF" pour bien montrer qu'on veux une variable "prix" suivi de la lettre F et non la variable "prixF")
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2008
    Messages : 56
    Par défaut
    Je vais vous donner le contenu de mon dhcpd.conf (enfin la partie interessante )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    ...
    
    subnet 192.168.1.0 netmask 255.255.255.0 {
       option broadcast-address 192.168.1.255;
       option routers 192.168.1.3;
       next-server 192.168.1.3;
    
    
    #bloc qui m'interesse
       host nommachine {
              hardware ethernet 00.00.00.00.00.00;
              fixed-address 192.168.1.4;
              option host-name "nommachine";
       }
    #fin du bloc qui m'interesse
    
    }
    En fait le but de la partie de mon script est de sortir du fichier dhcpd.conf le nom de la machine, l'@mac et l'@ip de chaque machine, il existe donc plusieurs machines, je pense donc que je suis obliger de parcourir le fichier avec un "read" et non un grep car si on grep on avance pas dans le fichier il trouve toujours le 1er bloc.
    J'vais essayé de relire vos réponses et d'en tirer quelques choses en attendant

    Oui tu as raison les tabulations de début de ligne disparaissent lors de la lecture du fichier, merci mygale.

    Bon après plusieurs tests :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo -e "$ligne" | grep - E "^host"
    Me rend bien mes lignes de nommachine, mais quand j'essaye de le place dans le IF pour pouvoir ensuite travailler avec les lignes d'après (@ip et @mac) de mon fichier et bien cela ne marche pas et me donne l'erreur suivante : line15: [: nommachine: binary operator expected

  7. #7
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    En bash 3
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  8. #8
    Invité
    Invité(e)
    Par défaut
    Re,

    Voici une solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while read ligne
    do
    #hostname
    echo -e "$ligne" | grep -E "^host" | awk -F" " '{print $2}'
    #Adress
    echo -e "$ligne" | grep -E "^hardware" | awk -F" " '{print $3}' | sed -e 's/;//'
    #ip
    echo -e "$ligne" | grep -E "^fixed-address" | awk -F" " '{print $2}'| sed -e 's/;//'
    done < $fich

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

Discussions similaires

  1. Comparaison ligne à ligne
    Par adibou666 dans le forum kettle/PDI
    Réponses: 5
    Dernier message: 17/06/2011, 02h52
  2. [bash] case et regexp
    Par Jean_Benoit dans le forum Linux
    Réponses: 4
    Dernier message: 27/06/2009, 16h04
  3. Réponses: 12
    Dernier message: 08/07/2008, 16h53
  4. Comparaison ligne + UPDATE
    Par monsterfab4 dans le forum SQL
    Réponses: 1
    Dernier message: 28/11/2007, 16h47
  5. [Access 2000] Comparaison lignes successives d'une meme table
    Par yepAccess dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 09/08/2007, 21h43

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