Remplacer 1er mot d'une ligne avec sed [Résolu/Fermé]

Signaler
-
 Jules75 -
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

5 réponses


Bonjour Jules75,

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

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

Encore merci pour le coup de pouce !

Jules75

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.
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 798
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

;-))
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 798
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

;-))
Merci a tous les deux pour ces explications detaillees et tres instructives ! Ca fonctionne super !

Jules