Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/09/2006, 16h52   #1
Invité régulier
 
Inscription : août 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 25
Points : 8
Points : 8
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 :
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.
julio_097 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 17h08   #2
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
Tourne-toi du côté de sed:

Code :
sed 's/expression/remplacemet/g' ancien-fichier nouveau-fichier
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 17h09   #3
Membre éprouvé
 
Avatar de argoet
 
Inscription : mai 2002
Messages : 535
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 535
Points : 461
Points : 461
Vous pouvez avec la commande "sed" resoudre votre probleme
Code :
1
2
 
     /bin/sed "s@OLD_Expression@New_Expression@g" dans_mon_fichier
__________________
Signé : Capitaine Jean-Luc Picard
argoet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 17h31   #4
Invité régulier
 
Inscription : août 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 25
Points : 8
Points : 8
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.
julio_097 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 17h35   #5
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
Tout simplement

Code :
sed 's/expression/remplacement/g' "$1"
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 17h44   #6
Invité régulier
 
Inscription : août 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 25
Points : 8
Points : 8
voici le script :

Code :
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 ?
julio_097 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 18h08   #7
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
sed travaille sur l'ensemble du fichier. Pas besoin de boucler sur les lignes.

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

Code :
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"
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 18h15   #8
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
ou, comme je l'ai lu la semaine passée dans http://www.developpez.net/forums/sho...d.php?t=212269

laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 18h24   #9
Invité régulier
 
Inscription : août 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 25
Points : 8
Points : 8
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.
julio_097 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2006, 20h29   #10
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
Au choix:

Code :
sed 's/http:\/\/adresse.com/http:\/\/nouvelle-adress.com/p'
Ou bien tu changes de délimiteurs:
Code :
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.
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2006, 12h41   #11
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 14
Détails du profil
Informations personnelles :
Âge : 44

Informations forums :
Inscription : octobre 2006
Messages : 14
Points : 10
Points : 10
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.
mikool19 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h22.


 
 
 
 
Partenaires

Hébergement Web