Pagina 1 di 1
[BASH] estrarre data da nome file
Inviato: mar 22 giu 2010, 17:47
da Absolut
Ciao ragazzi, ho un file che si chiama db_cc_1006200100.dmp. Di questo file sono riuscito ad estrarre la data, ovvero la parte: 100620
Ora voglio convertire la data da 100620 a 20/06/10 asegnandola a una variabile pippo. Lo faccio così:
pippo=echo "100620" | sed -n -e "s_\(..\)\(..\)\(..\)_\3/\2/\1_p"
solo che a schermo vi viene printato: 10/06/2010 e correttamente tale stringa viene assegnata alla variabile pippo.
vorrei però evitare che mi venga stamapto a schermo....
come posso fare?!
vi ringrazio!!!
Re: [BASH] estrarre data da nome file
Inviato: mar 22 giu 2010, 17:58
da Mario Vanoni
Absolut ha scritto:Ciao ragazzi, ho un file che si chiama db_cc_1006200100.dmp. Di questo file sono riuscito ad estrarre la data, ovvero la parte: 100620
Ora voglio convertire la data da 100620 a 20/06/10 asegnandola a una variabile pippo. Lo faccio così:
pippo=echo "100620" | sed -n -e "s_\(..\)\(..\)\(..\)_\3/\2/\1_p"
solo che a schermo vi viene printato: 10/06/2010 e correttamente tale stringa viene assegnata alla variabile pippo.
vorrei però evitare che mi venga stamapto a schermo....
come posso fare?!
vi ringrazio!!!
Elimina il p{rint] finale.
Re: [BASH] estrarre data da nome file
Inviato: mar 22 giu 2010, 18:05
da targzeta
Absolut ha scritto:...
Ora voglio convertire la data da 100620 a 20/06/10 asegnandola a una variabile pippo. Lo faccio così:
pippo=echo "100620" | sed -n -e "s_\(..\)\(..\)\(..\)_\3/\2/\1_p"
solo che a schermo vi viene printato: 10/06/2010 e correttamente tale stringa viene assegnata alla variabile pippo....
Ma tu non volevi 20/06/10, perchè dici che stampa 10/06/2010 e che è corretto? Comunque
Codice: Seleziona tutto
pippo=`echo "100620" | sed -n -e "s_\(..\)\(..\)\(..\)_\3/\2/\1_p"`
Emanuele
Re: [BASH] estrarre data da nome file
Inviato: mar 22 giu 2010, 21:40
da proffi
Una soluzione diversa può anche essere lavorare con le sottostringhe.
Supponendo che la data che hai estratto dal nome del file sia memorizzata in una variabile, ne puoi facilmente estrarre delle parti.
Codice: Seleziona tutto
data=100620
pippo=${data:4:2}"/"${data:2:2}"/"${data:0:2}
echo $pippo
20/06/10
Re: [BASH] estrarre data da nome file
Inviato: mer 23 giu 2010, 0:22
da ZeroUno
proffi ha scritto:Una soluzione diversa può anche essere lavorare con le sottostringhe.
wow, questa non la conoscevo.
Ho imparato una cosa nuova

(andavo sempre di sed,cut,awk e simila)
Re: [BASH] estrarre data da nome file
Inviato: mer 23 giu 2010, 14:55
da Mario Vanoni
proffi ha scritto:Una soluzione diversa può anche essere lavorare con le sottostringhe.
Supponendo che la data che hai estratto dal nome del file sia memorizzata in una variabile, ne puoi facilmente estrarre delle parti.
Codice: Seleziona tutto
data=100620
pippo=${data:4:2}"/"${data:2:2}"/"${data:0:2}
echo $pippo
20/06/10
Non la conoscevo nemmeno io,
ma vale solo se sul sistema esiste bash(1),
quindi non e` portabile su altre shell/su altri sistemi!
Re: [BASH] estrarre data da nome file
Inviato: mer 23 giu 2010, 15:06
da proffi
Sì certo, ma d'altra parte era specificato nel titolo del topic che si trattava di bash

. Lo trovo un modo più semplice ed elegante di estrarre parti di stringhe.
Con altre shell si ottiene un "bad substitution".
Io in ogni caso la trovo una funzione utilissima e molto versatile, lavoro spesso con file in cui la data è nel nome del file, e ho automatizzato in maniera efficace tante operazioni utilizzando le sottostringhe della bash.
Re: [BASH] estrarre data da nome file
Inviato: mer 23 giu 2010, 15:48
da ZeroUno
proffi ha scritto:Con altre shell si ottiene un "bad substitution".
Solitamente la bash di linux, se viene richiamata come sh (/bin/sh è un link a /bin/bash) dovrebbe comportarsi come una sh standard, ma sembra che così non sia. Infatti accetta quella sintassi.
Ho una macchina solaris che ha una vera sh, ed effettivamente lì non funge.
Ciao
01
Re: [BASH] estrarre data da nome file
Inviato: mer 23 giu 2010, 15:53
da Mario Vanoni
proffi ha scritto:Sì certo, ma d'altra parte era specificato nel titolo del topic che si trattava di bash

. Lo trovo un modo più semplice ed elegante di estrarre parti di stringhe.
Con altre shell si ottiene un "bad substitution".
Io in ogni caso la trovo una funzione utilissima e molto versatile, lavoro spesso con file in cui la data è nel nome del file, e ho automatizzato in maniera efficace tante operazioni utilizzando le sottostringhe della bash.
Hai perfettamente ragione!
Il titolo specificava [BASH], ma lui usava sed(1) che e` portabile!
La tua soluzione _elegantissima_ funziona solo in ambiente GNU/Linux/bash.
Re: [BASH] estrarre data da nome file
Inviato: mer 23 giu 2010, 16:22
da proffi
ZeroUno ha scritto:
Solitamente la bash di linux, se viene richiamata come sh (/bin/sh è un link a /bin/bash) dovrebbe comportarsi come una sh standard, ma sembra che così non sia. Infatti accetta quella sintassi.
Ho una macchina solaris che ha una vera sh, ed effettivamente lì non funge.
In ufficio abbiamo una macchina con ubuntu e anche lì se si usa sh il codice che ho scritto non funziona.
In effetti, su slackware sh è un link simbolico a bash, mentre in ubuntu è un link a dash, che, a parte per il detersivo, non avevo mai sentito nominare prima di adesso

.
Re: [BASH] estrarre data da nome file
Inviato: mer 23 giu 2010, 17:42
da ZeroUno
a quanto sembra anche la shell dell'initrd di slackware accetta quella sintassi.
L'initrd (per chi ha messo il kernel generic se lo può ritrovare in /boot/initrd-tree, e chi ha messo l'huge può dare "mkinitrd -c" secco per crearlo) utilizza il programma busybox che è un collezionatore di programmini minimali. tra questi sh.
date 'chroot /boot/initrd-tree /bin/sh' e ridate il comando.
P.S.:
mi viene in mente ora..
la shell 'base' di slackware (a cui credo che a suo tempo sh linkava) è ash.
provate
Codice: Seleziona tutto
ash
data=100620
pippo=${data:4:2}"/"${data:2:2}"/"${data:0:2}
Syntax error: Bad substitution
Re: [BASH] estrarre data da nome file
Inviato: gio 24 giu 2010, 10:35
da Absolut
grazie ragazzi!