Remplacer avec sed [Résolu/Fermé]

Signaler
-
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
-
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.

8 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 858
$ 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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 858
Salut,

On peut avoir un exemple concret de ce que tu veux exactement parce que les interprétations sont parfois délicates ;-))
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.
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 858
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

$
;-))
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
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 858
D'où mon 1er message et la demande d'exemple concret et j'aurai du ajouter, complet ;-))
Merci beaucoup,

Voici une affaire classé pour moi.

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