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 15/05/2007, 14h00   #1
Membre chevronné
 
Inscription : décembre 2004
Messages : 1 213
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 1 213
Points : 766
Points : 766
Par défaut remplacer une chaine de caractères avec sed

Bonjour, je désire remplacer la chaine de caractères TOTO par TATA dans tous mes fichiers .c Voici le code de mon script shell

Code :
1
2
3
4
5
6
7
8
9
10
11
 
#!/bin/sh
 
for i in $(ls *.c)
do
  j=$(i)bis.c
  cp $i $j
  rm -f $i
  sed "s/TOTO/TATA/g" $j >> $i
  rm -f $j
done
Y a-t-il moyen de faire plus court ? car là, j'ai une recopie de mon fichier et je supprime deux fichiers. Est-il possible de tout faire avec sed et ses options ?

Merci
salseropom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2007, 14h44   #2
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 306
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 306
Points : 8 590
Points : 8 590
Y a une option -i dispo sur le sed GNU qui permet de remplacer directement le fichier. Donc si cette option est reconnue par ton sed :

Code :
1
2
3
4
5
6
#!/bin/sh
 
for i in $(ls *.c)
do
  sed -s "s/TOTO/TATA/g" $i
done
Si l'option n'est pas reconnue, faut plus ou moins faire ce que tu fais, mais y a quand même un poil plus simple :

Code :
1
2
3
4
5
6
7
8
#!/bin/sh
 
for i in $(ls *.c)
do
  j=$(i)bis.c
  sed "s/TOTO/TATA/g" $i > $j
  mv -f $j $i
done
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2007, 14h56   #3
Membre chevronné
 
Inscription : décembre 2004
Messages : 1 213
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 1 213
Points : 766
Points : 766
Salut, effectivement, c'est tout de même plus simple (en fait, mes deux rm et mon cp sont égaux à ton mv)

Merci.
salseropom est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h16.


 
 
 
 
Partenaires

Hébergement Web