2010-08-09 30 views

risposta

2

Si potrebbe fare questo:

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

Penso

s/\./,/g 

dovrebbe servire che u vuole ... a meno che u desidera qualcosa di più speciale ...

0

Dal momento che la domanda è anche taggato awk:

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

non c'è bisogno di usare || 1, 'awk 'gsub (/\./, "")' – ghostdog74

+0

@ ghostdog74 'gsub' restituisce il numero di sostituzioni, la versione salta linee che non contenere almeno un punto. Non so abbastanza dei dati di input dell'OP per omettere '|| 1'. – schot

1

se avete bash/ksh etc

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

Bello, qui ce n'è uno più ingombrante che funziona in tutte le shell POSIX: 'var = XXX.XXX; echo $ {var%. *}, $ {var ## *.} ' – schot

5

Non sarebbe questo essere più precisi, come i whas OP parlando di numeri .. per assicurarsi che sia un numero che porta prima del punto. Il documento potrebbe contenere altri punti che l'OP non vuole sostituire.

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

Quanto rigoroso vuoi essere? È possibile modificare tutti i caratteri ., come altri hanno suggerito, ma ciò consentirà molti falsi positivi se si dispone di più di un semplice numero. Un po 'più severo sarebbe quella di richiedere che ci sono cifre su entrambi i lati del punto:

$ 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 

che non consente modifiche in un paio di casi strani, vale a dire 255.255.255.0 e a1.1a, ma gestisce "normali" i numeri in modo pulito.

1

Se si desidera sostituire il separatore decimale per scopi cosmetici

Nella maggior parte dei casi tr è probabilmente il modo più semplice per sostituire i caratteri:

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

Naturalmente se avete a che fare con i numeri di miscelazione di ingresso e stringhe , avrai bisogno di un approccio più robusto, come quello proposto da Michael J. Barber o anche di più.

Se si desidera sostituire il separatore decimale per scopi di calcolo

Per impostazione predefinita gawk (GNU awk, vale a direla awk della maggior parte delle distribuzioni GNU/Linux) utilizza il punto come separatore decimale:

$ 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 

Tuttavia è possibile forzarlo ad utilizzare il separatore decimale del locale corrente utilizzando l'opzione --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 

Se il formato di input è diverso dal locale corrente, puoi naturalmente ridefinire LC_NUMERIC temporaneamente:

$ 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)

Problemi correlati