Remplacer 1er mot d'une ligne avec sed

Résolu/Fermé
Jules75 - 6 déc. 2009 à 20:38
 Jules75 - 7 déc. 2009 à 15:00
Bonjour,

je cherche a remplacer le premier mot d'une ligne specifique d'une serie de fichiers, sans connaitre ce mot puisqu'il change d'un fichier a l'autre.

Je debute avec sed et ej n'ai pas encore reussi a trouver comment faire, malgre mon acharnement...

Pour changer le premier mot de la ligne 42 de tous les fichiers *.txt par le mot "nouvomo", sachant que le premier mot commence au tout debut de la ligne et est suivi immediatement par une tabulation, j'ai essaye sans succes:

sed -i '42s/^\t/nouvomo/' *.txt

Ou est l'erreur ? Et comment generaliser cette manipulation pour remplacer par exemple non pas le premier mais le second mot de la ligne, et si les mots sont separes entre eux soit par des espaces soit par des tabulations ? J'espere ne pas en demander trop !

Un grand merci d'avance !

Jules
A voir également:

5 réponses

Utilisateur anonyme
7 déc. 2009 à 00:04
Bonjour Jules75,

sed -i '42s/[^    ]*\(.*\)/nouvomo\t\1/' *.txt
la tabulation entre le ^ et ] est obtenue en console par ctrl-v ctrl-i
0
Merci beaucoup qqchquicommenceparQ!

Pourrais-tu juste m'expliquer la signification de \(.*\) et de \1 stp ?

Encore merci pour le coup de pouce !

Jules75
0
Utilisateur anonyme
7 déc. 2009 à 00:20
les parenthèses protégées (parce qu'on n'utilise pas l'option -r) permettent de "mémoriser" leur contenu (tu peux en utiliser jusqu'à neuf), et le \1 rappelle le contenu des premières parenthèses.
Ici, on "mémorise" ce qui suit la tabulation jusqu'à la fin de la ligne.
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
7 déc. 2009 à 07:40
Salut,

Une autre façon de faire :

[tmpfs]$ cat plop
blabla  blibli  bloblo  blublu
blabla  blibli  bloblo  blublu
blabla  blibli  bloblo  blublu
blabla  blibli  bloblo  blublu
blabla  blibli  bloblo  blublu
blabla  blibli  bloblo  blublu
blabla  blibli  bloblo  blublu

[tmpfs]$ sed '3 s/[^\t]*/AAAAAA/' plop     # 1ère occurrence ligne 3
blabla  blibli  bloblo  blublu
blabla  blibli  bloblo  blublu
AAAAAA  blibli  bloblo  blublu
blabla  blibli  bloblo  blublu
blabla  blibli  bloblo  blublu
blabla  blibli  bloblo  blublu
blabla  blibli  bloblo  blublu

[tmpfs]$ sed '3 s/[^\t]*/AAAAAA/3' plop     # 3ème occurrence ligne 3
blabla  blibli  bloblo  blublu
blabla  blibli  bloblo  blublu
blabla  blibli  AAAAAA  blublu
blabla  blibli  bloblo  blublu
blabla  blibli  bloblo  blublu
blabla  blibli  bloblo  blublu
blabla  blibli  bloblo  blublu
[tmpfs]$

Voir dans la FAQ : sed

;-))
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
7 déc. 2009 à 07:46
Et pour pouvoir remplacer la dernière occurrence (qui elle n'est pas suivie d'une tabulation) :

[tmpfs]$ sed '5 s/\([^\t]\|$\)*/AAAAAA/4' plop
blabla  blibli  bloblo  blublu
blabla  blibli  bloblo  blublu
blabla  blibli  bloblo  blublu
blabla  blibli  bloblo  blublu
blabla  blibli  bloblo  AAAAAA
blabla  blibli  bloblo  blublu
blabla  blibli  bloblo  blublu

;-))
0

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

Posez votre question
Merci a tous les deux pour ces explications detaillees et tres instructives ! Ca fonctionne super !

Jules
0