Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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