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 :

Script shell pour modifier plusieurs fichiers


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 25
    Points : 20
    Points
    20
    Par défaut Script shell pour modifier plusieurs fichiers
    bonjour,
    je voudrais écrire un script shell permettant de reperer une expression dans un fichier et remplacer cette expression par une autre.
    voici ce que j'ai écrit pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #!/bin/bash
    cat $1
    while read line
         grep -i expression line
         if ["$?" = "0"] then
     
         fi
    done < $1
    Mon probleme est que je ne sais pas comment faire pour remplacer l'expression par une autre une fois celle ci trouvé.
    Quelqu'un pourrait il m'éclairer SVP ?
    Merci.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Tourne-toi du côté de sed:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/expression/remplacemet/g' ancien-fichier nouveau-fichier

  3. #3
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    Vous pouvez avec la commande "sed" resoudre votre probleme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         /bin/sed "s@OLD_Expression@New_Expression@g" dans_mon_fichier

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 25
    Points : 20
    Points
    20
    Par défaut
    merci messieurs pour ces deux réponses.
    je n'arrive malheureusement pas a incorporer cette commande dans mon script, je n'obtient pas le résultat voulu à l'exécution du script.
    serait-il abusé de vous demander de reprendre mon bout de script, si celui-ci est correct, et d'y inclure la commande sed.
    Merci.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Tout simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/expression/remplacement/g' "$1"

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 25
    Points : 20
    Points
    20
    Par défaut
    voici le script :

    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
     
    #!/bin/bash
     
    if test $# -ne 1 
    then
        echo "argument necessaire"
        exit 1
    fi
    cat $1 | while read line
    do
        grep -i expression $line
        if ["$?" = "0"]
        then
            sed 's/expression/nouveau/g' "$1"	
        fi
    done < $1
    a l'exécution, il m'affiche bien les lignes concernées mais aucune modification n'est faite dans le fichier passé en argument.
    ??

    qu'est ce qui cloche d'apres vous ?

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    sed travaille sur l'ensemble du fichier. Pas besoin de boucler sur les lignes.

    Essaye ceci. Attention, le fichier d'origine sera écrasé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
     
    if test $# -ne 1 
    then
        echo "argument necessaire"
        exit 1
    fi
    sed 's/expression/nouveau/g' <"$1"> nouveau-fichier
    mv -f nouveau-fichier "$1"

  8. #8
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 25
    Points : 20
    Points
    20
    Par défaut
    ahhh ! merci de m'avoir débloqué. ton aide m'a bien rendu service.
    j'aurai juste une derniere petite question sur ce sujet.
    il s'avere en faite que l'expression que je souhaite changé est une adresse internet donc de type "http://www.adresse.com" et cela pose des problemes aparemment avec les // de l'adresse.
    aurait tu une solution pour ca ?
    Merci pour tout.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Au choix:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/http:\/\/adresse.com/http:\/\/nouvelle-adress.com/p'
    Ou bien tu changes de délimiteurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's#http://adresse.com#http://nouvelle-adress.com#p'
    Moi, mon choix est vite fait. Question de lisibilité

    Citation Envoyé par laurentschneider
    Intéressant! Merci.

  11. #11
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Octobre 2006
    Messages : 14
    Points : 16
    Points
    16
    Par défaut
    Outre perl qui est très fort en manipulation de chaines de caractères, il est intéressant de connaitre sed, awk et grep pour ça.

Discussions similaires

  1. Script shell pour convertir un fichier excel en texte
    Par hammache dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 13/03/2012, 10h55
  2. Script Shell pour construire des fichiers XML
    Par yanis97 dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 22/03/2010, 10h30
  3. [HTML] Macro pour modifier plusieur fichier html
    Par naouah dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 16/01/2009, 09h40
  4. Script shell pour parser un fichier txt
    Par pcsystemd dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 30/09/2008, 09h32
  5. script shell pour renommer un fichier
    Par wang_xue dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 15/11/2007, 15h45

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