[RISOLTO] Pulire un parametro o una variabile dai caratteri indesiderati
[RISOLTO] Pulire un parametro o una variabile dai caratteri indesiderati
Re: Shell scripting. Pulire un parametro o una variabile dai caratteri indesiderati
Codice: Seleziona tutto
echo "24/08/08" | tr -cd '[[:digit:]]'Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- Otako
- Entusiasta Emergente

- Messaggi: 1424
- Iscrizione: giovedì 10 giugno 2010, 22:01
- Desktop: pantheon
- Distribuzione: elementary OS Luna x86_64
- Località: Villafranca di Verona
Re: Shell scripting. Pulire un parametro o una variabile dai caratteri indesiderati
Codice: Seleziona tutto
echo 24/08/08 | python -c 'print(__import__("sys").stdin.read().replace("/","").strip())'Ricordatevi di utilizzare @memoize per le vostre funzioni.
-
l3on4rdo
Re: Shell scripting. Pulire un parametro o una variabile dai caratteri indesiderati
vedi qui, al paragrafo "27-4. String operations on arrays"
un esempio, con la tua data:
Codice: Seleziona tutto
l3on4rdo@l3on4rdo-laptop:~$ data="24/08/08"
l3on4rdo@l3on4rdo-laptop:~$ echo $data
24/08/08
l3on4rdo@l3on4rdo-laptop:~$ echo ${data[@]//\//}
240808
l3on4rdo@l3on4rdo-laptop:~$
Codice: Seleziona tutto
data_purgata=${data[@]//\//}Re: Shell scripting. Pulire un parametro o una variabile dai caratteri indesiderati
Codice: Seleziona tutto
echo $current_line_parameter | tr -d "/"Re: [RISOLTO] Pulire un parametro o una variabile dai caratteri indesiderati
e otterrai sempre 123456
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
-
l3on4rdo
Re: [RISOLTO] Pulire un parametro o una variabile dai caratteri indesiderati
Codice: Seleziona tutto
echo ${data[@]//[^[:digit:]]/}
240808
Questo invece elimina i separatori indipendentemente da quali essi siano.
ciao
edit:
a margine faccio notare che le operazioni di stringa sono più performanti
(anche se (per stringhe così corte) parliamo di puffosecondi
Codice: Seleziona tutto
l3on4rdo@l3on4rdo-laptop:~$ data="123quelv@tte|apèsc@cHetipare456"
l3on4rdo@l3on4rdo-laptop:~$ time echo $data | tr -cd '[[:digit:]]'
123456
real 0m0.005s
user 0m0.010s
sys 0m0.010s
l3on4rdo@l3on4rdo-laptop:~$ time echo ${data[@]//[^[:digit:]]/}
123456
real 0m0.002s
user 0m0.000s
sys 0m0.000s
ma sarebbe interessante (credo) indagare
riciao
Re: [RISOLTO] Pulire un parametro o una variabile dai caratteri indesiderati
Ma penso che un'altra soluzione, oltre a quelle già postate, potrebbe essere l'utilizzo delle regex.
Ti spiego la sua struttura.
Allora devi salvare tutto ciò che è un numero. Quindi, ammesso che la struttura della stringa sia:
Codice: Seleziona tutto
n/n/nCodice: Seleziona tutto
=~/(\d)/wCodice: Seleziona tutto
echo $1.$2.$3;- Otako
- Entusiasta Emergente

- Messaggi: 1424
- Iscrizione: giovedì 10 giugno 2010, 22:01
- Desktop: pantheon
- Distribuzione: elementary OS Luna x86_64
- Località: Villafranca di Verona
Re: [RISOLTO] Pulire un parametro o una variabile dai caratteri indesiderati
Non è un po' complesso rispetto alle soluzioni già proposte?Sorriso. ha scritto: Sono arrivato in ritardo.
Ma penso che un'altra soluzione, oltre a quelle già postate, potrebbe essere l'utilizzo delle regex.
Ti spiego la sua struttura.
Allora devi salvare tutto ciò che è un numero. Quindi, ammesso che la struttura della stringa sia:Di conseguenza farai una regex del genere:Codice: Seleziona tutto
n/n/nOra, non conosco bene le regex quindi può essere che sbaglio. Però il ragionamento è: prendi tutto ciò che è una cifra numerica e salvalo in una variabile ( $1, $2, $3, etc. etc. ) e poi le unisci:Codice: Seleziona tutto
=~/(\d)/wCodice: Seleziona tutto
echo $1.$2.$3;
Ricordatevi di utilizzare @memoize per le vostre funzioni.
Re: [RISOLTO] Pulire un parametro o una variabile dai caratteri indesiderati
Bé in generale le regex sono più complicate dell'utilizzo delle funzioni. Però se si impara a usare le regex, nel momento in cui viene a mancare una funzione, se ne può fare un'altraOtako ha scritto:Non è un po' complesso rispetto alle soluzioni già proposte?Sorriso. ha scritto: Sono arrivato in ritardo.
Ma penso che un'altra soluzione, oltre a quelle già postate, potrebbe essere l'utilizzo delle regex.
Ti spiego la sua struttura.
Allora devi salvare tutto ciò che è un numero. Quindi, ammesso che la struttura della stringa sia:Di conseguenza farai una regex del genere:Codice: Seleziona tutto
n/n/nOra, non conosco bene le regex quindi può essere che sbaglio. Però il ragionamento è: prendi tutto ciò che è una cifra numerica e salvalo in una variabile ( $1, $2, $3, etc. etc. ) e poi le unisci:Codice: Seleziona tutto
=~/(\d)/wCodice: Seleziona tutto
echo $1.$2.$3;![]()
Re: Shell scripting. Pulire un parametro o una variabile dai caratteri indesiderati
potresti spiegare meglio il funzionamento? che funzionè ha ogni simbolo?l3on4rdo ha scritto: con le manipolazioni di stringa fornite da bash, per esempio.
vedi qui, al paragrafo "27-4. String operations on arrays"
un esempio, con la tua data:pertanto la modifica è:Codice: Seleziona tutto
l3on4rdo@l3on4rdo-laptop:~$ data="24/08/08" l3on4rdo@l3on4rdo-laptop:~$ echo $data 24/08/08 l3on4rdo@l3on4rdo-laptop:~$ echo ${data[@]//\//} 240808 l3on4rdo@l3on4rdo-laptop:~$ciaoCodice: Seleziona tutto
data_purgata=${data[@]//\//}
-
l3on4rdo
Re: [RISOLTO] Pulire un parametro o una variabile dai caratteri indesiderati
scherzo.
Suppongo che ti riferisci solo a questo:
Codice: Seleziona tutto
${data[@]//\//}1)
Codice: Seleziona tutto
${data[@]}2) le / nell'ordine in cui compaiono indicano
(le prime due //) che voglio sostituire tutte le occorrenze (con un solo / elimini solo la prima) di quello che sta dopo...
ovvero di \/
in cui \ è il carattere per fare l'escape dei caratteri speciali (in quanto / è un carattere speciale di bash)
e / è il carattere speciale
e sostituirlo con quello che sta dopo la / successiva a \/... ovvero lo sostituisco con niente, perché non c'è niente
Ma siccome qui è un bordello di slash e controslash... ti faccio un esempio più terrestre!
dalla stringa:
Codice: Seleziona tutto
3on4rdo@l3on4rdo-laptop:~$ stringa="abcdabcdabcd"
l3on4rdo@l3on4rdo-laptop:~$ echo ${stringa}
abcdabcdabcd
Codice: Seleziona tutto
l3on4rdo@l3on4rdo-laptop:~$ echo ${stringa[@]/a/A}
AbcdabcdabcdCodice: Seleziona tutto
l3on4rdo@l3on4rdo-laptop:~$ echo ${stringa[@]//a/A}
AbcdAbcdAbcd
stringa è data
i primi due // indicano che vuoi sostituire tutte le occorrenze
la a è il carattere da sostituire ed è l'analogo di \/ in cui \ serve per fare l'escape di / (per a non serve perché non è un carattere speciale di bash)
la A indica ciò con cui vuoi sostituire... tu prima volevi eliminare e quindi nel caso della data non ci mettevi nulla al posto della A.
Spero davvero di essere stato chiaro.
Se così non fosse, chiedi pure.
ciao
ps: questo metodo è legato al fatto che hai / come separatore. se vuoi invece eliminare tutto ciò che non è numero usi:
Codice: Seleziona tutto
echo ${data[@]//[^[:digit:]]/}pps: ad essere proprio pignoli, in questo caso di una stringa e non di un array (per come lo intende bash l'array) puoi anche omettere la parte
Codice: Seleziona tutto
[@]ppps: ti ho postato un link che è una miniera di informazioni su 'sta roba!
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti
