Changer un mot !!

se7en -  
asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   -
Bonjour,

Dans un fichier de commande j'ai un mot qui vient se repeter plusieurs fois & je souhaiterais le changer par un autre mot sans être obligé de faire le changement mot par mot ... Existe-t-il une commande ou faut-il cree un batch ...
Merci de votre aide.
A voir également:

4 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

Regarde avec les filtres "sed" et "tr" :
sed 's/mot1/mot2/g' le_fichier >le_fichier.bis
ou
cat fichier | tr "mot1" "mot2" >le_fichier.bis
;-))

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
0
jisisv Messages postés 3678 Statut Modérateur 934
 
tr "mot1" "mot2"

tr va remplacer
m->m
o->p
t->t
1->2
Ce qui n'est pas l'effet escpmpté.
johand@horus:~$ tr  'abc' 'def'
axbxcxd abc
dxexfxd def


Johan
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 106
 
Oui,

Ou sans créer de fichier .bis, en utilisant l'éditeur vi, comme çà

vi le_fichier
:%s/mot1/mot2/g
:wq


Si tu dois faire beaucoup de manipulations sur des fichiers ASCII, celà vaut vraiment le coup d'apprendre à maîtriser vi (ou "vim", qui est plus fonctionnel). Avec quelques touches tu fais des merveilles !


Dal
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut [Dal],

Le "fichier.bis" c'était dans un premier temps "ôkazou" on ne taperait pas la bonne syntaxe et que le résultat escompté ne soit pas exact...
(le temps de se familiariser avec la syntaxe des commandes et des expressions régulières)

;-))

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 106 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
Okies :)

Mais alors il faudra avec sed qu'il supprime le "fichier" et renomme "fichier.bis" en "fichier".... Enfin, du moins avec mon sed (sur ma boite FreeBSD 4.9) j'obtiens un fichier vide avec ta commande si je met le même nom en entrée et sortie (ma version de sed ne semble pas gérer une ouverture et écriture simultanée sur le même nom de fichier). Ta version agit peut-être différemment.

J'ai essayé "tr" aussi, que je ne connaissais pas. La commande produit un fichier bizarre chez moi avec ta syntaxe. Des caractères sont substitués un peu partout, en plus des mots ... :(


Dal
0
asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426 > [Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention  
 
Pour sed, il faut soit faire un cat du fichier et un pipe vers sed soit avoir la bonne version de sed qui permette de faire un backup automatique :)


Dans le premier cas, c"'est juste une histoire d'ordre dans lequel ton interpreteur execute la commande:
Dans le cas d'une redirection, il commence normalement pas ouvrir le fichier cible, donc par l'effacer dans le cas de >

...Mana mana
   Tutudutu...
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > [Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention  
 
Exact ;-)

Bon j'ai les mêmes résultats chez moi (pour "sed"). Ça m'apprendra à répondre sans tester ;-)))

Pour mes versions :
[jp@Mandrake jp]$ sed -V
GNU sed version 3.02

[jp@Mandrake jp]$ tr --version
tr (textutils) 2.1
Écrit par Jim Meyering.
Sinon, comme le dit "Adrien" avec un "cat" et un "pipe", ça marche :
 cat essai | sed 's/mot5/mot1/g' > essai
Sinon, avec un "pipe" de plus et la commande "mv" ça le fait aussi :
 sed 's/mot1/mot2/g' < essai > essai2 | mv -f essai2 essai
Pas très élégant certes, mais tout aussi efficace. Ça marche aussi pour "tr" :
 cat essai | tr "mot5" "mot1" > essai
;-))

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
0
asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426 > [Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention  
 
Yop, rien ne vaut les tests, mais rien ne vaut une bonne mise à jour de sed!!! :)

Maintenant que je suis rentré je peux tester sans craintes:
[adrien@XP1800+ sed_test]$ sed -V
GNU sed version 4.0.9
Copyright (C) 2003 Free Software Foundation, Inc.

[adrien@XP1800+ adrien]$ md sed_test && cd sed_test

[adrien@XP1800+ sed_test]$ cat > fichier_test << EOF
> XXXX
> truc
> XXXX
> chose
> bidule
> XXXX
> EOF

[adrien@XP1800+ sed_test]$ ls -l
total 4
-rw-r--r--  1 adrien adrien 33 oct 29 21:08 fichier_test

[adrien@XP1800+ sed_test]$ cat fichier_test
XXXX
truc
XXXX
chose
bidule
XXXX

[adrien@XP1800+ sed_test]$ sed -i.anc 's/XXXX/YYYY/g' fichier_test

[adrien@XP1800+ sed_test]$ ls -l
total 8
-rw-r--r--  1 adrien adrien 33 oct 29 21:09 fichier_test
-rw-r--r--  1 adrien adrien 33 oct 29 21:08 fichier_test.anc

[adrien@XP1800+ sed_test]$ diff fichier_test fichier_test.anc
1c1
< YYYY
---
> XXXX
3c3
< YYYY
---
> XXXX
6c6
< YYYY
---
> XXXX

[adrien@XP1800+ sed_test]$ 
C'est quand même vachtement bien plusse propre! :D

Bon, si mes souvenir sont exacts, l'option interéssante de sed et arrivé à la version 4.0.7, ou par là :)

PS: JP, envoies moi un mél! :)

@++
...Mana mana
Tutudutu...
0
se7en
 
Merci pour vos réponses.
Parfait ;-))
0
vi4ever
 
vi -c "1,$ s/MOTACHANGER/NOUVEAUMOT/gc|:wq" fichier

PS : le 'c' demande la confirmation à chaque fois le retirer si tu veux pas de confirmation à chaque motàchanger
0