2010-08-09 14 views

Répondre

2

Vous pouvez le faire:

echo "XXX.XX" | sed s/\./,/g 
0

Je pense

s/\./,/g 

devrait servir ce que tu veux ... à moins que tu veux quelque chose de plus spécial ...

0

Puisque la question est aussi étiquetés awk:

awk 'gsub(/\./,",")||1' 
+0

ne pas avoir à utiliser || 1, 'awk « gsub (/\./, "") ' – ghostdog74

+0

@' ghostdog74 gsub' renvoie le nombre de remplacements, votre version permet de sauter les lignes qui ne contient pas au moins un point. Je ne connais pas assez les données d'entrée de l'OP pour omettre le '|| 1'. – schot

1

si vous avez bash/ksh etc

var=XXX.XXX 
echo ${var/./,} 
+0

Nice, voici un plus lourd qui fonctionne dans tous les shells POSIX: 'var = XXX.XXX; echo $ {var%. *}, $ {var ## *.} ' – schot

5

Ne serait-ce pas plus précis que les OP whas parler de chiffres .. pour vous assurer qu'il est un nombre qui est devant le point. Le document pourrait contenir d'autres points que l'OP ne veut pas remplacer.

sed '/[0-9]\./s/\./,/g' 
4

À quel point voulez-vous être? Vous pouvez changer tous . caractères, comme d'autres l'ont suggéré, mais cela permettra à un grand nombre de faux positifs si vous avez plus que des chiffres. Un peu plus stricte serait d'exiger qu'il y a des chiffres sur les deux côtés du point:

$ echo 123.324 2314.234 adfdasf.324 1234123.daf 255.255.255.0 adsf.asdf a1.1a | 
> sed 's/\([[:digit:]]\)\.\([[:digit:]]\)/\1,\2/g' 
123,324 2314,234 adfdasf.324 1234123.daf 255,255,255,0 adsf.asdf a1,1a 

Cela ne permet des changements dans quelques cas étranges, à savoir 255.255.255.0 et a1.1a, mais gère les numéros « normaux » proprement.

1

Si vous voulez remplacer le séparateur décimal à des fins cosmétiques

Dans la plupart des cas tr est probablement la meilleure façon de remplacer les caractères:

$ echo "0.3"|tr '.' ',' 
0,3 

Bien sûr, si vous traitez avec des numéros de mélange d'entrée et les chaînes , vous aurez besoin d'une approche plus robuste, comme celle proposée par Michael J. Barber ou même plus.

Si vous voulez remplacer le séparateur décimal à des fins de calcul

Par défaut gawk (GNU awk, à savoirla awk de la plupart des distributions GNU/Linux) utilise le point comme séparateur décimal:

$ echo $LC_NUMERIC 
fr_FR.UTF-8 
$ echo "0.1 0.2"|awk '{print $1+$2}' 
0.3 
$ echo "0,1 0,2"|awk '{print $1+$2}' 
0 

Cependant vous pouvez le forcer à utiliser le séparateur décimal des paramètres régionaux en utilisant l'option --use-lc-numeric:

$ echo $LC_NUMERIC 
fr_FR.UTF-8 
$ echo "0.1 0.2"|awk --use-lc-numeric '{print $1+$2}' 
0 
$ echo "0,1 0,2"|awk --use-lc-numeric '{print $1+$2}' 
0,3 

Si le format d'entrée est différent de l'environnement local actuel, vous pouvez bien sûr redéfinir LC_NUMERIC temporairement:

$ echo $LC_NUMERIC 
fr_FR.UTF-8 
$ echo "0.1 0.2"|LC_NUMERIC=en_US.UTF-8 awk --use-lc-numeric '{print $1+$2}' 
0 
$ echo "0,1 0,2"|LC_NUMERIC=fr_FR.UTF-8 awk --use-lc-numeric '{print $1+$2}' 
0,3 

(Credits and other links)

Questions connexes