#1 Le 30/11/2007, à 13:20
- Sleipnir
[RESOLU][sed] Remplacer <expr> d'une ligne donnée pas son numéro
Bjr,
J'ai passé pas mal de temps à chercher une solution du coté de chez 'sed', mais sans grand succés ( pas beaucoup de doc sur sed d'ailleurs )
Voilà le truc :
un fichier de données
1 mot1 mot2 on
2 mot4 mot5 on
3 mot6 mot7 on
je voudrais donc remplacer le 'on' de la ligne 2 par 'off', avec 'sed -i' pour pouvoir ecrire directement dans le fichier.
Est-il possible de combiner 'sed -i -n' ( j'ai essayé sans succès )
J'arrive à quelque chose en utilisant des boucles et des conditions mais je suis sur qu'il y a plus simple ( du coté de chez sed peut etre ? )
Juste pour information, le mieux entre
cat fichier | sed -i 's/on/off/g' > fichier
sed -i 's/on/off/g' fichier
Merci d'avance
Dernière modification par Sleipnir (Le 30/11/2007, à 15:48)
Hors ligne
#2 Le 30/11/2007, à 13:27
- cduray
Re : [RESOLU][sed] Remplacer <expr> d'une ligne donnée pas son numéro
Hello
(je ne peux pas tester pour l'instant, suis pas sous Ubuntu)
sed -i "2 s/on/off/" fichier
ne marcherait-il pas?
Maintenant si le 2 était en début de ligne, tu pourrais écrire
sed -i "g/^2/s/on/off/" fichier
C
Dernière modification par cduray (Le 30/11/2007, à 13:28)
Hors ligne
#3 Le 30/11/2007, à 14:42
- Sleipnir
Re : [RESOLU][sed] Remplacer <expr> d'une ligne donnée pas son numéro
Impeccable, merci...
Ca faisait 2 jours que j'essayais de trouver ( si qqlun à une bonne adresses pour sed )
La première commande fonctionne, la deuxième erreur (dommage...c'est quoi l'option 'g' en début ? )
sed: -e expression n°1, caractère 2: caractères inutiles après la commande
sed c'est un super outil...quand on sait s'en servir !
Encore merci
Hors ligne
#4 Le 30/11/2007, à 14:56
- Yannick_LM
Re : [RESOLU][sed] Remplacer <expr> d'une ligne donnée pas son numéro
cat fichier | sed -i 's/on/off/g' > fichier
sed -i 's/on/off/g' fichier
La deuxième est bien meilleure. Cat en principe sert à concaténer des fichiers, c'est à dire rajouter le début d'un fichier à la fin d'un autre.
Dans la première commande, tu lis d'abord tout le fichier, puis tu le renvoie à sed, puis tu le réécris...
Dans la deuxième, tu lis le fichier ligne par ligne, et tu fais les modification "en place", c'est à dire directement dans le fichier. C'est bien mieux !
Sinon, les deux commandes ont exactement les mêmes effets.
Trucs et astuces pour Vim
Ma web page avec des trucs dessus ...
Hors ligne
#5 Le 30/11/2007, à 15:01
- Alain.g
Re : [RESOLU][sed] Remplacer <expr> d'une ligne donnée pas son numéro
Salut
à‡a devrait fonctionner sans le g. Comme le "on" a l'air en fin de ligne, je te conseille de mettre "on$" (pour éviter de remplacer le "on" éventuellement contenu dans un des mots précédents)
Et mettre un espace après le "2" pour éviter que toutes les lignes commençant pas 2 (20, 21, 22 etc...) soient touchées.
'/^2 /s/on$/off/'
C'est seulement s'il y a les numéros indiqués dans le document (sinon utilise l'autre solution).
Pour les tutos, tu peux voir cette page : http://sed.sourceforge.net/grabbag/tutorials/
(mais il n'y aura pas directement de cours sur les expressions rationnelles, faudra voir à cà´té)
Dernière modification par Alain.g (Le 30/11/2007, à 15:37)
Xubuntu Karmic !
Hors ligne
#6 Le 30/11/2007, à 15:23
- Sleipnir
Re : [RESOLU][sed] Remplacer <expr> d'une ligne donnée pas son numéro
@Alain.g
Ta commande fonctionne impeccablement également ( je l'adopte )
Merci pour le lien, bien qu'en anglais....
'on$' j'avais trouvé tout seul, comme un grand...:rolleyes:
C'est explication supplémentaires vont bien m'être utile
Hors ligne