Sed

Résolu/Fermé
dino - 17 mars 2010 à 15:27
 dino - 18 mars 2010 à 08:34
Bonjour,

J'ai une liste de fichiers >300 ,je veux remplace un mot a l'interrieur de tous ces fichier par la commande sed

for i in listdeficier do

cat $i|sed "s/ABCD/DEF/g"


qlq a une idée ?

Merci

8 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
17 mars 2010 à 15:31
Salut,

sed -is 's/ABC/DEF/g' fichier*

fichier* est à remplacer par le terme adéquat (expansion comprise).
0
Merci pour ta reponse rapide !

Mais voila ce que j'ai :

set -vx
for i in list.txt do

cat $i|sed 's/ABC/DEF/g' $i
done


A l'execution j'ai :

Syntax error at line 5 : `cat' is not expected.

une idée ?

Merci
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
17 mars 2010 à 15:54
Ta liste de fichier est dans un fichier texte ?
Lesdits fichiers (ceux de la liste) sont dans le même répertoire que le script ?

Sinon ma commande est faite pour être lancée depuis un terminal (sans passer par un script et sans boucle) à conditions d'avoir un dénominateur commun aux fichiers à prendre en compte (par exemple *.txt).
0
Oui tout mes fichiers sont dans le meme rep. et mon petit script aussi.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
17 mars 2010 à 16:15
Exemple beaucoup plus parlant :

[reptest]$ ls -1
fichier1
fichier2
fichier3

[reptest]$ cat fichier1
Ligne 1 fchier1
Ligne 2 fchier1
Ligne 3 fchier1
Ligne 4 fchier1
Ligne 5 fchier1
Ligne 6 fchier1
Ligne 7 fchier1
Ligne 8 fchier1
Ligne 9 fchier1
Ligne 10 fchier1

[reptest]$ cat fichier2
Ligne 1 fchier2
Ligne 2 fchier2
Ligne 3 fchier2
Ligne 4 fchier2
Ligne 5 fchier2
Ligne 6 fchier2
Ligne 7 fchier2
Ligne 8 fchier2
Ligne 9 fchier2
Ligne 10 fchier2

[reptest]$ cat fichier3
Ligne 1 fchier3
Ligne 2 fchier3
Ligne 3 fchier3
Ligne 4 fchier3
Ligne 5 fchier3
Ligne 6 fchier3
Ligne 7 fchier3
Ligne 8 fchier3
Ligne 9 fchier3
Ligne 10 fchier3

[reptest]$ sed -is 's/Ligne 5/blablabla/' fich*

[reptest]$ cat fichier1
Ligne 1 fchier1
Ligne 2 fchier1
Ligne 3 fchier1
Ligne 4 fchier1
blablabla fchier1
Ligne 6 fchier1
Ligne 7 fchier1
Ligne 8 fchier1
Ligne 9 fchier1
Ligne 10 fchier1

[reptest]$ cat fichier2
Ligne 1 fchier2
Ligne 2 fchier2
Ligne 3 fchier2
Ligne 4 fchier2
blablabla fchier2
Ligne 6 fchier2
Ligne 7 fchier2
Ligne 8 fchier2
Ligne 9 fchier2
Ligne 10 fchier2

[reptest]$ cat fichier3
Ligne 1 fchier3
Ligne 2 fchier3
Ligne 3 fchier3
Ligne 4 fchier3
blablabla fchier3
Ligne 6 fchier3
Ligne 7 fchier3
Ligne 8 fchier3
Ligne 9 fchier3
Ligne 10 fchier3

[reptest]$

;-))
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
je l'ai executer telle qu'elle est sous mon chemin voila ce que j'ai eu :

sed -is 's/ABCD/DEF/' *fichier
sed: Not a recognized flag: i
Usage: sed [-n] Script [File ...]
sed [-n] [-e Script] ... [-f Script_file] ... [File ...]
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
17 mars 2010 à 16:36
Quel système d'exploitation ? Unix ou Linux ?

Quelle version de sed ?
0
C'est un Unix AIX :AIX 5300-09-02-0849

Pour la version du sed je ne peux pas te dire.....
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
Modifié par jipicy le 17/03/2010 à 17:13
Ok, donc effectivement il faudra passer par un script ;-\

#! /bin/sh 

#set -xv 

cd /chemin/rep 
for i in * 
do  
sed 's/ABC/DEF/g' "$i" > "tmp_$i" && mv "tmp_$i" "$i" 
done



$ man woman
Il n'y a pas de page de manuel pour woman.

GNU/Linux : Gnu/Linux is Not Ubuntu !
0
Bonjour,

Merci beaucoup ca marche nickel !

Bonne journée !
0