Remplacer 1er mot d'une ligne avec sed

Résolu
Jules75 -  
 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
Configuration: Ubuntu 9.10
Firefox 3.5.5

5 réponses

  1. Utilisateur anonyme
     
    Bonjour Jules75,

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

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

    Encore merci pour le coup de pouce !

    Jules75
    0
  3. Utilisateur anonyme
     
    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
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

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

    Jules
    0