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 :

script shell récupération de chaine


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 36
    Points : 35
    Points
    35
    Par défaut script shell récupération de chaine
    j'ai un système de fichiers à partir d'un certain répertoire de départ X

    Ce système de fichiers contient une arborescence de répertoires et de fichiers sources, tous écrits en php (c'est pas très important, le php).

    Les fichiers sources contiennent des lignes de code parmi lesquelles figurent de temps en temps un motif "intéressant" :

    .... <?php print_string('clef1', 'clef2') ?> .... clef1 et clef2 peuvent évidemment prendre n'importe quelle valeur ne comportant pas des '

    Le but du script shell à réaliser est de parcourir cette arborescence à partir de X, de collecter dans tous les fichiers et dans chaque répertoire les chaînes intéressantes, et de produire UN fichier dans chaque répertoire où les clefs sont réutilisées pour produire à chaque fois une ligne :

    ...
    $strings['clef1']['clef2'] = 'clef1';
    ...

    Si aucune chaîne n'a été trouvée à un certain niveau (répertoire) le fichier de collecte : strings.collected.txt n'est pas créé.

    On ne demande pas le dédoublonnage des lignes, mais on aimerait pouvoir avoir le fichier de collecte trié.
    merci de m'aider

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Personnellement je ne ferais pas cela en shell... Ca sera sûrement bien plus simple à faire en Perl.

    --
    Jedaï

  3. #3
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    C'est largement faisable en sed/grep via les REGEXP

    man sed
    man grep
    man regexp

  4. #4
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Une solution parmi d'autres

    http://www.shellunix.com/regexp.html


    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
     
    find . -type d | while read Dir 
    do
    	rm -f $Dir/strings.collected.txt 2>/dev/null
    	find $Dir -maxdepth 1 -type f | xargs \
    	     sed -n "/<?php print_string('[^']\+', *'[^']\+') *?>/s/<?php print_string('\([^']\+\)', *'\([^']\+\)') *?>.*$/\$strings['\1']['\2'] = '\1';/p" >> $Dir/strings.collected.txt
    	if [[ -e $Dir/strings.collected.txt ]] ; then
    		if [[ ! -s $Dir/strings.collected.txt ]] ; then
    			rm $Dir/strings.collected.txt 
    		else
    			echo "* ok dans $Dir/strings.collected.txt "
    		fi
    	fi 
     
    done

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 36
    Points : 35
    Points
    35
    Par défaut
    merci bcp pour ta réponse
    bonne soirée

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 13/01/2014, 14h53
  2. Réponses: 3
    Dernier message: 11/09/2007, 17h58
  3. Recherche chaine de caractère script shell
    Par guilig dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 09/08/2007, 11h06
  4. Réponses: 2
    Dernier message: 31/07/2007, 16h25
  5. Supprimer la premiere lettre dune chaine en script shell sh
    Par caesarvanou dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 10/01/2006, 18h41

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