Forum Programmation.shell [réglé] [ZSH] RegExp et Qualifiers ?!

Posté par (page perso) .
2
1
juil.
2011

Hello,

Voici un petit problème auquel je suis confronté et j'aimerai avoir votre avis / aide si possible.

Soit une arborescence qui ressemble à ceci:

$ tree -d
.
├── reseau
│   ├── 10.0.0.28
│   │   ├── 2011-07-01
│   ├── 10.0.0.58
│   │   ├── 2011-06-30
│   ├── 10.0.130.10
│   │   ├── 2011-06-30
│   │   ├── 2011-07-01
└── serveurs
    ├── 10.0.128.29
    │   ├── 2011-06-28
    │   ├── 2011-06-29
    │   ├── 2011-06-30
    │   ├── 2011-07-01
    ├── 10.0.128.31
    │   ├── 2011-06-28
    │   ├── 2011-06-29
    │   ├── 2011-06-30
    │   ├── 2011-07-01

Je cherche à uniquement obtenir la liste des répertoires contenant une adresse IP.

J'ai donc essayé ceci:

$ zmodload zsh/pcre

$ for d in **/*(/e{'[[ $REPLY -pcre-match "^.*/\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?$" ]]'}); do echo "-- $d"; done
-- reseau/10.0.0.28
-- reseau/10.0.0.58
-- reseau/10.0.130.10
-- serveurs/10.0.128.29
-- serveurs/10.0.128.31

Ça fonctionne comme attendu sauf que c'est crado et que j'aurai préféré faire ceci:

$ zmodload zsh/pcre

$ for d in **/*(/e{'[[ $REPLY -pcre-match "^.*/(\d{1,3}\.){3}\d{1,3}$" ]]'}); do echo "-- $d"; done

Et là, clairement, monsieur zsh n'aime pas voir des {1,3} et autres {3} à cet endroit et me le fait savoir assez brutalement !

zsh: unknown file attribute

Existe-t-il une solution ou une autre façon de faire ?

Merci pour votre aide.

  • # Trouvé...

    Posté par (page perso) . Évalué à 3.

    Bon bah... Laissez tomber, j'ai trouvé ^^.

    $ for d in **/*(/e_'[[ $REPLY -pcre-match "^.*/(\d{1,3}\.){3}\d{1,3}$" ]]'_); do echo "-- $d"; done
    

    Solution trouvée en regardant des exemples sur cette page !

    • [^] # Re: Trouvé...

      Posté par (page perso) . Évalué à 6.

      Comme c'est dur à voir, je précise que le monsieur a changé les accolades par des underscores.

      Commentaire sous licence LPRAB - http://sam.zoy.org/lprab/

  • # D'un Z qui veux dire zuper-concis

    Posté par . Évalué à 2.

    Et pourquoi pas plus simplement print -l **/<0-255>(.<0-255>)(#c3) ?
    Qui doit nécessite extended_glob et une version récente à cause du globbing flag #c.

    Ou peut être pour une plus vieille version (les deux derniers sont moins précis):
    print -l **/<0-255>.<0-255>.<0-255>.<0-255>
    print -l **/<0-255>(.<0-255>)##
    print -l **/(<0-255>.#)##

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.