2012-08-09 19 views
7

sto usando grep su TextWrangler per trovare stringhe di questo tipo:Trova/Sostituisci usando grep e TextWrangler

4,600.00 

mio comando regex è la seguente:

\d.\d{3}.\d{2} 

che sembra trovare il stringhe correttamente. Vorrei sostituire la stringa 4,600.00 con 4600.00 poiché desidero salvare i dati in un file .csv. Come rimuovo la virgola da ogni numero che trovo?

+0

Immagino che la tua riga contenga non solo questo numero ma qualcosa come "foo, bar, blah, 4.600.000.00, alcuni, più", tuttavia, e se la linea fosse "foo, bar, blah, 999.600.000.00, ..." come può dici che 999 e 600000,00 sono due colonne? ci sono altre regole nel tuo file di input? – Kent

+0

I numeri restano sotto 100.000 quindi ho solo bisogno di trovare ', 000.00'. Non ho ancora capito quale sia il codice di sostituzione; Ho provato '\ d \ d {3}. \ D {2} '. – djq

risposta

12

Ricerca: (\d{1,3}),(\d{1,3})\.(\d{1,2})

Sostituire: \1\2.\3

Lavori in TextWrangler.

1

awk oneliner:

awk --re-interval '{x=gensub(/([0-9]{1,3}),([0-9]{3}\.[0-9]{2})/,"\\1\\2","g");print x}' file 

prova:

kent$ awk --version|head -1 
GNU Awk 3.1.6 

kent$ echo "foo,bar,blah,46,000.00,some,more"|awk --re-interval '{x=gensub(/([0-9]{1,3}),([0-9]{3}\.[0-9]{2})/,"\\1\\2","g");print x}' 
foo,bar,blah,46000.00,some,more 
+0

la vera domanda qui era per TextWrangler, non per la riga di comando –

0

Un modo utilizzando sed:

sed -r 's/([0-9]{1,3}),([0-9]{3}\.[0-9]{2})/\1\2/g' file.txt 

si potrebbe aggiungere il flag -i di scrivere le modifiche direttamente nel file.