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
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
A voir également:
- Remplacer avec sed
- Remplacer disque dur par ssd - Guide
- Remplacer word - Guide
- Remplacer tete sur photo - Guide
- Remplacer uptobox - Guide
- Remplacer carte graphique - Guide
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 894
7 janv. 2008 à 14:42
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;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
7 janv. 2008 à 11:00
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 ;-))
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.
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.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
7 janv. 2008 à 11:55
7 janv. 2008 à 11:55
Re-
Si ce n'est que des espaces simples (hors tabulation), cette simple commande devrait suffire :
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 $;-))
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
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
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
7 janv. 2008 à 13:16
7 janv. 2008 à 13:16
D'où mon 1er message et la demande d'exemple concret et j'aurai du ajouter, complet ;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
7 janv. 2008 à 16:18
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}';-))