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

Unix Discussion :

[KSH] Passer une variable dans la regexp d'un find ?!


Sujet :

Unix

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 26
    Points : 29
    Points
    29
    Par défaut [KSH] Passer une variable dans la regexp d'un find ?!
    Bonjour,

    Voilà je souhaiterais trouver un fichier normé, en m'appuyant sur une regexp contenant 2 variables ($DATE et $LieuTraitement) prédéfinies plus haut dans le script.
    Cela se passe sur un shell ksh sous AIX.

    Quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find $REP_LOG -type f -name "e[A-Z]{4,6}_{3,}[0-9]{2}_[0-9]{2}[a-z]{3}[A-Z]{6,}[0-9]{2}_${Traitement}_${DATE}-[0-9]{6}\.o"
    Toute la première partie de mon regexp est OK (le problème arrive au moment des deux variables {TE} et {DATE} enfin je crois ... ).
    J'ai essayé en fermant l'ensemble avec avec des doubles quotes, les simples quote pas de grande différence ... même chose en mettant un \ devant les $ ... comment les faire interpréter ?! :/

    Et niveau débug pour le coup je suis aveugle puisque même l'option -x du shell ne me renvoie rien.
    En vous remerciant pour votre aide.

  2. #2
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    La syntaxe est correcte. La cohérence, pas trop, ta première variable s'appelle "LieuTraitement", puis "Traitement" puis "TE" ...
    Sinon, sois tu t'es trompé dans ta regexp, sois les variables contiennent elles-mêmes une regexp et doivent donc être modifiées.

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    L'option -name ne prend pas une regexp en argument, mais un pattern shell ("glob"). Dans la version Gnu de find il y a une option -regex, mais tu ne l'as peut-être pas dans ton environnement.

  4. #4
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Oui, bien sûr. Je me suis laissé avoir par "Toute la première partie de mon regexp est OK" ...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 26
    Points : 29
    Points
    29
    Par défaut
    @jlliagre en effet petit emmêlage de pinceau dans le nom des variables et gros manque de rigueur ...
    Il fallait évidemment comprendre Traitement = Lien de Traitement ..

    Et lorsque je disais que le partern était ok c'est que celui a été testé manuellement pas effectivement que la commande find fonctionnait jusqu'au variables enfin je me rends compte que je me suis mal exprimé.

    @matafan ; C'est plutôt embêtant je ne peux rien installer de supplémentaire sur la plateforme et je dois travailler avec les outils à ma disposition qui sont plutôt rudimentaires je dois dire (hormis perl mais mon auto-objectif est de réussir en n'utilisant que le combo bash/sed/awk ). Je vais quand même essayer de trouver une autre astuce.

    Sinon rien à voir avec mon problème mais avec le temps je remarque que ce n'est pas si simple à gérer les petites nuances entre le shell sh linux et le ksh aix (je ne connais que ces deux là) niveau portabilité il s'agit pas simplement de changer le nom du shebang pour que tout roule ... ha le calcul automatique d'une date passée non implémentée, les options différentes entre les commandes (parfois infimes mais traitre ..) les opérateurs de test différents, les extractions de chaines ${chaine:position:longueur} absent en ksh etc ... je sais qu'un informaticien est sensé être capable de s'adapter en fonction de son environnement, mais là je trouve simplement dommage que des "langages" de scripts pratiquement frères jumeaux, aient des petites divergences sur seulement quelques points, mais assez pour venir enrailler la machine de interopérabilité.
    Voilà fin du hors sujet et merci à vous deux.

  6. #6
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Il existe un standard, POSIX, qui définit une syntaxe qui est respectée par tous les shells courants tels que sh (sauf Solaris), dash, bash, ksh, ksh93 et les utilitaires Unix de base.
    http://www.opengroup.org/onlinepubs/...cu_chap02.html
    http://www.opengroup.org/onlinepubs/.../contents.html
    Si tu utilises autre chose que ce qui est défini par ce standard, et en particulier si tu t'appuie sur les nombreuses extensions apportées par les outils Gnu (bashismes et autres) ton script n'est pas portable et tu t'exposes aux problèmes rencontrés.

  7. #7
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    S'il te faut absolument des regexp, tu peux toujours piper la sortie du find dans un grep -E.

Discussions similaires

  1. Passer une variable dans une image via un script
    Par Lomig dans le forum Langage
    Réponses: 2
    Dernier message: 16/10/2006, 17h10
  2. Passer une variable dans une requête SQL
    Par Remedy dans le forum C++
    Réponses: 2
    Dernier message: 11/05/2006, 16h48
  3. [VBA]Passer une variable dans une formule Excel
    Par David1974 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/01/2006, 16h52
  4. [Struts] Passer une variable dans l'url
    Par pilz dans le forum Struts 1
    Réponses: 2
    Dernier message: 30/03/2005, 15h23

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