Remplacer avec sed

Résolu
mosta -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    $ 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
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    On peut avoir un exemple concret de ce que tu veux exactement parce que les interprétations sont parfois délicates ;-))
    0
  3. camel
     
    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.
    0
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    
    $
    ;-))
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. camel
     
    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
    0
  7. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    D'où mon 1er message et la demande d'exemple concret et j'aurai du ajouter, complet ;-))
    0
  8. camel
     
    Merci beaucoup,

    Voici une affaire classé pour moi.

    Many thanks.
    0
  9. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Une solution peut être un peu moins tortueuse, enfin façon de dire :
    sed '/^ / {:boucle; s/^ [^[:alnum:]]*/&\n/; s/\([ ]\?\) \{1\}\n/\10/; t boucle}'
    ;-))
    0