Newsgroup: it.comp.os.linux.software
Titolo: sed: sostituire parte di una stringa

Salve,
sto impazzendo con sed da due ore su quella che penso sia una cazzata.
Sto programmando in bash, ho una variabile che contiene una cosa tipo
www.pippo.com-access.log.1.gz
Devo cambiare 1 con 20050712 (la data di oggi).
Ho provato cosi`:
echo $VAR | sed 's/^(.*)\.([0-9])\.gz$/\1\.20050712\.gz/'
Ma non fa niente. Mi ritorna la stringa esattamente come era prima.
Ho provato infinite combinazioni, tipo
(.*)\.1\.gz$
(.*).1.gz$
([a-zA-Z0-9\._]*1.gz$
Ma niente.
Ho provato anche con il regexp plugin di eclipse e mi dice che la mia
regexp iniziale e` corretta.
O non capisco qualcosa di sed o tutte le mie credenze sulle regexp
crollano.
Grazie.

 echo $VAR | sed 's/^(.*)\.([0-9])\.gz$/\1\.20050712\.gz/'
La regexp ad occhio e croce mi pare giusta,ma il tutto _in questo caso_ si
puo` semplificare con un banale s/[0-9]/20050712/
Poi bookmarka questo link che torna sempre comodo :)
http://sed.sourceforge.net/sed1line.txt

 Devo cambiare 1 con 20050712 (la data di oggi).
se è dentro un file
# cat nome_file | sed 's/1/20050712/g'
se è una variabile (come nel tuo caso)
# echo $VARIABILE | sed 's/1/20050712/g'

 Devo cambiare 1 con 20050712 (la data di oggi).
se è dentro un file
# cat nome_file | sed 's/1/20050712/g'
se è una variabile (come nel tuo caso)
# echo $VARIABILE | sed 's/1/CICCIO/g'

 
http://sed.sourceforge.net/sed1line.txt
bellissimo il link....stampo subito ;-)

 # echo $VARIABILE | sed 's/1/20050712/g'
e perchè scomodare sed, quando bash fa già da sola?
$ varia=www.pippo.com-access.log.1.gz
$ echo ${varia/[0-9]/20050712}
www.pippo.com-access.log.20050712.gz
-- 
Здрасти!
cat: .signature: No such file or directory

 
http://sed.sourceforge.net/sed1line.txt
ue'... ganzo questo file...
-- 
"Mi scusi se la infortuno signorina,
ma questi modoli, che enno da ripienare?"
RRB @ 
http://www.allservice.it/

 www.pippo.com-access.log.20050712.gz
Su sto NG non si smette mai di imparare. questo non lo sapevo proprio.

 www.pippo.com-access.log.20050712.gz
Questa e' fantastica, non la sapevo! :)
L'ho corretta leggermente in 
echo ${varia/.[0-9].gz/.20050712.gz}
perche' mi matchi il punto esatto (ho alcuni siti tipo 
www.pippo21.com
)
Grazie mille a tutti per le risposte praticamente immediate.
Nel frattempo, giusto per non credere di essere completamente
deficiente, ho rifatto lo script in PHP e funzionava, ma mi tengo anche
quello in bash che non si sa mai. :)
Bye.

 quello in bash che non si sa mai. :)
Però vorrei mettere i puntini sulle i......
Facendo cosi
[0-9]
tu vai a sostituire TUTTI i file da 0 a 9 con la data di oggi...
Dal momento che sono delle rotazioni di log, il file .1. *potrebbe*
corrispondere ad oggi, ma il file .2. non corrisponde di certo ad
oggi....
devi fare una sostituzione per volta (prima tutto 1 poi tutto 2....)
oppure farle tutte in una volta dicendo che 1 va con data di oggi, 2 va
con data di oggi meno un mese.......etc etc

 con data di oggi meno un mese.......etc etc
A dire il vero ero ancora piu' granulare.
Lo script e' qualcosa tipo
for F in `find . -name "*.gz"`; do
	prendi F, cambia il numero in data
	copia F nella dir dei backup
done
Poi schedulato c'e` lo script che prende tutto dalla dir dei backup, li
mette su nastro in modo incrementale e cancella quelli piu` vecchi di
tot.
Bye.

 tot.
Allora sei piu avanti di me ;-)