Remplacer avec sed

Résolu/Fermé
mosta - 7 janv. 2008 à 10:09
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 7 janv. 2008 à 16:18
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.
A voir également:

8 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
7 janv. 2008 à 14:42
$ 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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
7 janv. 2008 à 11:00
Salut,

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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
7 janv. 2008 à 13:16
D'où mon 1er message et la demande d'exemple concret et j'aurai du ajouter, complet ;-))
0
Merci beaucoup,

Voici une affaire classé pour moi.

Many thanks.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
7 janv. 2008 à 16:18
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