[script] Search and replace

Search and replace [script] - Linux et OS Alternatifs

Marsh Posté le 05-04-2005 à 14:50:45    

salut à tous,
Est ce qu'il existe une commande pour chercher et remplacer dans un répertoire:
-tous les fichiers .php par exemple en .php5
-dans le contenu de tous les fichiers ayant .php par .php5
 
Merci pour votre aide
++

Reply

Marsh Posté le 05-04-2005 à 14:50:45   

Reply

Marsh Posté le 05-04-2005 à 15:01:32    

1. regarde peut etre rename
2. sed ou awk devrait faire l'affaire

Reply

Marsh Posté le 05-04-2005 à 15:05:27    

salut,
j'ai déjà cherché des infos sur seb et awk mais je capte rien :)
 
tu pourrais m'aiguiller ?
 
++

Reply

Marsh Posté le 05-04-2005 à 15:07:52    

C'est quoi la question au juste? Tu veux remplacer toutes les occurences de .php par .php5 dans un fichier texte? :??:

Reply

Marsh Posté le 05-04-2005 à 15:09:28    

dans tous les fichiers texte d'un répertoire et de ces sous-répertoires et aussi renomer les fichiers php en php5
 
++

Reply

Marsh Posté le 05-04-2005 à 15:10:57    

tu peux faire quelquechose comme ça :  
 
for file in `find . -name '*.php'
do
#Renomme les fichiers
newfile=`echo $file | sed 's/.php/.php5/'`
`mv $file $newfile
 
#Change le contenu
`sed 's/.php/.php5/g' < $newfile`
 
done
 
 
J'espere que ça marche.
 
ciao
 
Edit: J'avais oublié des ' dans le deuxième sed, peut-$etre que ça marche sans !


Message édité par mr simon le 05-04-2005 à 15:12:38
Reply

Marsh Posté le 05-04-2005 à 15:14:37    

merci, j'ai une petite erreur :  
./script.sh: line 5: syntax error near unexpected token `|'
./script.sh: line 5: `  newfile=`echo $file | sed 's/.php/.php5/'``mv $file $newfile'

Reply

Marsh Posté le 05-04-2005 à 15:17:23    

mr simon a écrit :

tu peux faire quelquechose comme ça :  
 
for file in `find . -name '*.php'
do

On peut aussi utiliser un vrai shell et se contenter de find file in **/*.php :o  
 

Citation :

#Renomme les fichiers
newfile=`echo $file | sed 's/.php/.php5/'`
`mv $file $newfile`

Il faut enlever les backquotes autour du mv et ça marche, mais eek quoi. mv "$file" "$file"\5. Ou un truc avec rename :o  
 

Citation :

#Change le contenu
`sed 's/.php/.php5/g' < $newfile`

Pareil, il faut enlever les backquotes, et il faut rajouter -i à sed.


Message édité par Pillow le 05-04-2005 à 15:18:09
Reply

Marsh Posté le 05-04-2005 à 15:24:12    

ben zut, je dois vraiment ête nul mais mais j'ai toujours la même erreur :(

Reply

Marsh Posté le 05-04-2005 à 15:27:43    

Il manque un backquote à la fin du find aussi [:petrus75]

Reply

Marsh Posté le 05-04-2005 à 15:27:43   

Reply

Marsh Posté le 05-04-2005 à 15:32:14    

ah génial :)  
ca remplace le nom des fichiers :)
Comment remplacer dans le contenu des fichiers maitenant?
 
++

Reply

Marsh Posté le 05-04-2005 à 15:36:45    

ohan a écrit :

ah génial :)  
ca remplace le nom des fichiers :)
Comment remplacer dans le contenu des fichiers maitenant?
 
++


man sed :o

sed -i 's/toto/tata/g' nomdufichier

remplace toutes les occurrences de toto par tata dans le fichier nomdufichier.


Message édité par Pillow le 05-04-2005 à 15:45:16
Reply

Marsh Posté le 05-04-2005 à 15:39:22    

Pillow a écrit :

man sed :o

sed -i 's/toto/tata/g' < nomdufichier

remplace toutes les occurrences de toto par tata dans le fichier nomdufichier.


 
le '<' je suis pas sur qu'il soit obligatoire

Reply

Marsh Posté le 05-04-2005 à 15:40:08    

ah, c'est bien ce que je pensais :)
g compris ce qui n'allait pas:
1.j'ai testé avec des fichiers php vide
2.j'ai ajouté du contenu au fichier php5 et forcement, ca ne fonctionnait aps car il travaille qu'avec les .php
 
 
Merci à tous pour votre aide.
 
++

Reply

Marsh Posté le 05-04-2005 à 15:42:48    

l0ky a écrit :

le '<' je suis pas sur qu'il soit obligatoire

Exact, évidemment ça ne risque pas de marcher avec -i [:petrus75]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed