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
    Une solution peut être un peu moins tortueuse, enfin façon de dire :
    sed '/^ / {:boucle; s/^ [^[:alnum:]]*/&\n/; s/\([ ]\?\) \{1\}\n/\10/; t boucle}'
    ;-))
    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
        D'où mon 1er message et la demande d'exemple concret et j'aurai du ajouter, complet ;-))
        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
            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. 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
                Salut,

                On peut avoir un exemple concret de ce que tu veux exactement parce que les interprétations sont parfois délicates ;-))