Remplacer avec sed

Résolu
Bonjour,

Je souhaiterai remplacer les champs des lignes qui commence par un espace par des "0" et qu'il s'arréte dés qu'il trouve un caractére autre qu'un espace.

J'ai tenté des trucs mais ça ne marche pas:

sed -e 's/ /0/,/"X"/p' fic.txt

Merci de votre aide.
Configuration: Windows XP
Internet Explorer 6.0

8 réponses

  1. Modérateur
    Salut,

    On peut avoir un exemple concret de ce que tu veux exactement parce que les interprétations sont parfois délicates ;-))
    1. J'ai un fichier dont les premiers champs sont parfois des espaces et je souhaiterai remplacer ceux là par des "0"

      1023
      12333
      44
      2580
      1458
      5

      et je voudrais qu'il m'affiche aprés ma commande le résultat suivant:

      01023
      12333
      00044
      02580
      01458
      00005

      Merci.
      1. Modérateur
        Re-

        Si ce n'est que des espaces simples (hors tabulation), cette simple commande devrait suffire :
        sed '/^ / s/ /0/g'
        Dans le cas d'espace et de tabulations il faut au-préalable convertir les tabulations en espaces (avec la commande "expand") :
        $ var="AAA\n\tBBB\n CCC\n\t\tDDD\nEEE"
        
        $ echo -e "$var"
        AAA
                BBB
         CCC
                        DDD
        EEE
        
        $ echo -e "$var" | expand | sed '/^ / s/ /0/g'
        AAA
        00000000BBB
        0CCC
        0000000000000000DDD
        EEE
        
        $
        ;-))
        1. Ta commande est correct pour remplacer les espace par des 0 sed '/^ / s/ /0/g'
          mais elle ne modifie pas que le premier espace du début de ligne, elle modifie tous les débuts de champs.

          01023 0LOGS 0..
          12333 0LOGS 0...
          00044 0LOGS 0..
          02580 0LOGS 0
          01458 0LOGS 0
          00005 0LOGS 0
          1. Modérateur
            D'où mon 1er message et la demande d'exemple concret et j'aurai du ajouter, complet ;-))
            1. Modérateur
              $ cat plop
               1023 LOGS blabla
              12333 LOGS blabla
                 44 LOGS blabla
               2580 LOGS blabla
               1458 LOGS blabla
                  5 LOGS blabla
              
              $ sed '/^ / {s/^ [^[:alnum:]]*/&\n/;h;s/\n.*$//;s/ /0/g;x;s/.*\n//;x;G;s/\n//}' plop
              01023 LOGS blabla
              12333 LOGS blabla
              00044 LOGS blabla
              02580 LOGS blabla
              01458 LOGS blabla
              00005 LOGS blabla
              ;-))
              1. Modérateur
                Une solution peut être un peu moins tortueuse, enfin façon de dire :
                sed '/^ / {:boucle; s/^ [^[:alnum:]]*/&\n/; s/\([ ]\?\) \{1\}\n/\10/; t boucle}'
                ;-))