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
    $ 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
      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
                Une solution peut être un peu moins tortueuse, enfin façon de dire :
                sed '/^ / {:boucle; s/^ [^[:alnum:]]*/&\n/; s/\([ ]\?\) \{1\}\n/\10/; t boucle}'
                ;-))