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 :

Comment faire une recherche/remplacement sous Linux


Sujet :

Shell et commandes GNU

  1. #1
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut Comment faire une recherche/remplacement sous Linux
    Hello,

    Je suis un newbie legerement (mais tres legerement avancé ) sous linux.

    Actuellement je travaille sous une version Suze enterprise 9.

    J'aurais besoin d'écrire un script qui remplisse certaines taches (de maniere one shot).

    A partir de repertoires compressés (à priori au format zip), chercher une chaine de caractere et de la remplacer par une autre .

    Cette recherche et remplacement devraient se faire au niveau du contenu des fichiers ainsi que dans le titre des fichiers ou repertoires.
    le contenu du fichier zip est une arborescence de repertoires et de fichiers.

    J'avoue que je ne sais pas quelle direction prendre ...

    Est ce que quelqu'un pourrait m'aiguiller?

    Merci d'avance,
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  2. #2
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Points : 5 075
    Points
    5 075
    Par défaut
    Déjà, ce qui est sur, tu devrais décompresser les fichiers zip

    Ensuite , pour traiter le nom des fichiers, je vois pas trop ....

    Pour l'intérieur des fichiers, un petit find avec Sed (exemple de find avec rm : http://linux.developpez.com/faq/?page=Advanced#findtime )

    Tu recompresses à la fin

    voir le guide du ksh pour de l'aide
    Grave urgent !!!

  3. #3
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Merci pour ta reponse!!





    la solution que tu m'as evoquée et standart .. donc fonctionne sur n'importe quelle distribution?

    Merci encore pour ta réponse et pour ton aide!
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  4. #4
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    pour remplacer une chaine de cractère dans toute une arboresence de répertoire :

    find ./dir/ -type f -name "*.txt" | xargs -n1 perl -pi -e "s/old/new/g"
    Si tu passe par sed tu devra utiliser un fichier intermédiaire (sed ne sait pas mmodifier le fichier sur lequel il travail)

    Pour automatiser tout ça :

    mktemp : pour créer un répertoire ou tu dézipera le fichier
    unzip : pour décompresser
    mv : pour modifer les noms des dossiers/fichiers

  5. #5
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Citation Envoyé par narmataru
    pour remplacer une chaine de cractère dans toute une arboresence de répertoire :

    find ./dir/ -type f -name "*.txt" | xargs -n1 perl -pi -e "s/old/new/g"
    Si tu passe par sed tu devra utiliser un fichier intermédiaire (sed ne sait pas mmodifier le fichier sur lequel il travail)

    Pour automatiser tout ça :

    mktemp : pour créer un répertoire ou tu dézipera le fichier
    unzip : pour décompresser
    mv : pour modifer les noms des dossiers/fichiers

    Merci pour ta reponse,

    juste besoin de petites precisions, la premiere partie permet de recuperer les fichiers, et la deuxieme (coté droit du pipe (|) ) permet d'appliquer les modifs.

    A quoi corespond a commande perl?
    Merci d'avance!
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  6. #6
    Membre confirmé
    Avatar de bster
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    372
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2005
    Messages : 372
    Points : 497
    Points
    497
    Par défaut
    tu peux t'inspirer de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    mkdir /tmp/TEST
    tar zxf archive4.tar.gz -C /tmp/TEST
    cd /tmp/TEST
    for i in *2005* ; do mv $i `echo $i | sed -e "s/2005/2006/"` ; done
    cd $HOME
    rm archive4.tar.gz
    tar cf archive5.tar.gz /tmp/TEST
    rm -rf /tmp/TEST
    renome tous les repertoires et fichiers contenant 2005 en remplaçant 2005 par 2006 dans les noms de fichiers et repertoires.

    pour remplacer 2005 par 2006 à l'interieur de tous les fichiers de tous les sous répertoires suffit d'ajouter la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -type f -exec vi -c "%s/ 2005 / 2006 /|:wq" {} \;
    en t'inspirant de ça tu dois pouvoir adapter à tes besoins.

    voilà où trouver les infos:
    man find
    man bash
    man vi
    man sed
    man unzip
    man gzip
    Comité de lutte contre le langage SMS sur les forums
    Veuillez écrire dans un langage compréhensible par les humains, merci.

  7. #7
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Points : 5 075
    Points
    5 075
    Par défaut
    Citation Envoyé par fabszn
    Citation Envoyé par narmataru
    pour remplacer une chaine de cractère dans toute une arboresence de répertoire :

    find ./dir/ -type f -name "*.txt" | xargs -n1 perl -pi -e "s/old/new/g"
    Si tu passe par sed tu devra utiliser un fichier intermédiaire (sed ne sait pas mmodifier le fichier sur lequel il travail)

    Pour automatiser tout ça :

    mktemp : pour créer un répertoire ou tu dézipera le fichier
    unzip : pour décompresser
    mv : pour modifer les noms des dossiers/fichiers

    Merci pour ta reponse,

    juste besoin de petites precisions, la premiere partie permet de recuperer les fichiers, et la deuxieme (coté droit du pipe (|) ) permet d'appliquer les modifs.

    A quoi corespond a commande perl?
    Merci d'avance!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xargs -n1 perl -pi -e "s/old/new/g"
    Ca te permet justement d'appliquer une expression régulière sur chaque fichier récupérer par la commande find.
    L'expression reg est "s/old/new/g" -> remplacement par la chaine de caractère "new" de toute chaine "old"
    Grave urgent !!!

  8. #8
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    ben là c'est 'man perl', 'man find' etc...
    Apprend aussi a utiliser les expressions rationnelles utiliser dans pratiquement toutes les commande unix traitant du texte (sed, grep, awk, perl, etc...) (google : "regular expression")

  9. #9
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Merci bcp ... Je me retrouve avec pleins de solutions maintenant!!

    C'est genial!! je vais regarder tous cela et faire ma cuisine pour arriver à mes fins!


    Merci encore à tous!!!
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  10. #10
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Points : 5 075
    Points
    5 075
    Par défaut
    Narmataru :
    Grave urgent !!!

  11. #11
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Citation Envoyé par narmataru
    ben là c'est 'man perl', 'man find' etc...
    Apprend aussi a utiliser les expressions rationnelles utiliser dans pratiquement toutes les commande unix traitant du texte (sed, grep, awk, perl, etc...) (google : "regular expression")

    OOuuuppss

    Tu as raison... je vais regarder tout de suite
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  12. #12
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    héhé j'avais déjà posé une question similaire sur le forum d'ou le "perl -pi -e "

    moi aussi je t'aimeux Katyucha

  13. #13
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Je n'ai pas encore pu tester... il faut que je finisse un autre boulot avant...Mais je pense, au vue de la qualité des reponses, que mon problème sera resolu !

    Merci encore à tous!
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


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

Discussions similaires

  1. [C#][XML] Comment faire une recherche?
    Par l3b3lge dans le forum ASP.NET
    Réponses: 4
    Dernier message: 10/10/2006, 10h10
  2. Réponses: 3
    Dernier message: 08/09/2006, 18h00
  3. Réponses: 5
    Dernier message: 03/08/2006, 08h03
  4. Comment faire une recherche dans ACCESS
    Par Bass_Room dans le forum Access
    Réponses: 2
    Dernier message: 02/06/2006, 10h51
  5. Comment faire une analyse croisée sous MySQL ?
    Par jcachico dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/12/2005, 18h32

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