[BASH] estrarre data da nome file
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
- Absolut
- Linux 4.x
- Messaggi: 1465
- Iscritto il: gio 10 feb 2005, 0:00
- Slackware: current
- Località: Roma
[BASH] estrarre data da nome file
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!!!
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!!!
-
- Iper Master
- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: [BASH] estrarre data da nome file
Elimina il p{rint] finale.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!!!
- targzeta
- Iper Master
- Messaggi: 6628
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: [BASH] estrarre data da nome file
Ma tu non volevi 20/06/10, perchè dici che stampa 10/06/2010 e che è corretto? ComunqueAbsolut 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....
Codice: Seleziona tutto
pippo=`echo "100620" | sed -n -e "s_\(..\)\(..\)\(..\)_\3/\2/\1_p"`
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
Re: [BASH] estrarre data da nome file
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.
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
- ZeroUno
- Staff
- Messaggi: 5441
- Iscritto il: ven 2 giu 2006, 14:52
- Nome Cognome: Matteo Rossini
- Slackware: current
- Kernel: slack-current
- Desktop: ktown-latest
- Distribuzione: 01000000-current
- Località: Roma / Castelli
- Contatta:
Re: [BASH] estrarre data da nome file
wow, questa non la conoscevo.proffi ha scritto:Una soluzione diversa può anche essere lavorare con le sottostringhe.
Ho imparato una cosa nuova (andavo sempre di sed,cut,awk e simila)
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
-
- Iper Master
- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: [BASH] estrarre data da nome file
Non la conoscevo nemmeno io,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
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
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.
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.
- ZeroUno
- Staff
- Messaggi: 5441
- Iscritto il: ven 2 giu 2006, 14:52
- Nome Cognome: Matteo Rossini
- Slackware: current
- Kernel: slack-current
- Desktop: ktown-latest
- Distribuzione: 01000000-current
- Località: Roma / Castelli
- Contatta:
Re: [BASH] estrarre data da nome file
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.proffi ha scritto:Con altre shell si ottiene un "bad substitution".
Ho una macchina solaris che ha una vera sh, ed effettivamente lì non funge.
Ciao
01
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
-
- Iper Master
- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: [BASH] estrarre data da nome file
Hai perfettamente ragione!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.
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
In ufficio abbiamo una macchina con ubuntu e anche lì se si usa sh il codice che ho scritto non funziona.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 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 .
- ZeroUno
- Staff
- Messaggi: 5441
- Iscritto il: ven 2 giu 2006, 14:52
- Nome Cognome: Matteo Rossini
- Slackware: current
- Kernel: slack-current
- Desktop: ktown-latest
- Distribuzione: 01000000-current
- Località: Roma / Castelli
- Contatta:
Re: [BASH] estrarre data da nome file
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
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
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
- Absolut
- Linux 4.x
- Messaggi: 1465
- Iscritto il: gio 10 feb 2005, 0:00
- Slackware: current
- Località: Roma
Re: [BASH] estrarre data da nome file
grazie ragazzi!