Newsgroup: it.comp.os.linux.iniziare
Titolo: variabile + sed

Ho uno script bash dove imposto una variabile in base alla data:
 
miadata="giorno_`date +%Y%m%d`"
 
Vorrei sapere se in una riga successiva dove richiamo sed c'è il modo di 
inserire il contenuto di miadata:
 
cat miofile | sed 's/COMMENT/ ... quivorreimettere $miadata ... /g' >> 
risultato.txt
 
E' possibile? Grazie.

 risultato.txt
 
Certo. Devi evitare che il tuo parametro stia dentro le virgolette 
semplici. Chiudile subito prima, e riaprile subito dopo. Puoi quotare il 
tuo parametro con virgolette doppie. Per esempio:
 
$ cat miofile | sed 's/COMMENT/'"$miadata"'/g' >>risultato.txt
-- 
Bye, Lem
Ceterum censeo ISLAM esse delendum
_________________________________________________________________
Non sprecare i cicli idle della tua CPU, né quelli della tua GPU.
 
http://www.worldcommunitygrid.org/index.jsp
 
http://www.rnaworld.de/rnaworld/
 
http://home.edges-grid.eu/home/
 
 
http://www.gpugrid.net/
 

Addi' 18 giu 2012, memo scrive:

Il tuo formato di date senza lineetta o spazio o barra non e' che sia 
molto leggibile, te lo metto con le lineette, oppure vedi tu. Il tutto 
maiuscolo di MIADATA e' solo un'usanza.
 
MIADATA="$(date "+giorno_%Y-%m-%d")"
 
sed s/"COMMENT"/"$MIADATA"/g miofile >> risultato.txt
 
Le virgolette in sed sono inutili ma innocue, salvo casi particolari le 
puoi togliere, inoltre preferendo per la data ad esempio il classico 
formato 18/06/2012, rifai tutto cosi':
 
MIADATA="$(date "+giorno_%d/%m/%Y")"
 
sed s#COMMENT#$MIADATA#g miofile >> risultato.txt
 
-- 
Tanti saluti
 

 puoi togliere
 
Beh, le virgolette si possono sempre togliere... salvo quando servono. ;)
 
È IMHO buona abitudine usarle sempre, anche in sed.
Poi magari io sono il primo a non farlo, ma almeno predico bene. ;) 


 Poi magari io sono il primo a non farlo, ma almeno predico bene. ;) 
 
Si, le ho messe anche perche' io per la data uso "18 giu 2012" con gli 
spazi e formato " 6 giu 2012" invece di "06 ..." per il giorno che 
introduce in ogni caso uno spazio nei giorni a una cifra. Avevo visto 
il tuo reply, ma ho preferito attaccarmi direttamente all'OP perche' 
non avevo capito perche' tu non avessi corretto le tortuosita' nel 
mettere "giorno_" fuori comando date, a parte l'inutile cat.
 
Ne approfitto: non riesco a ricordare perche' qui su icoli era stato, 
molto tempo fa, criticato negativamente l'uso, pur strettamente 
ristretto a bash, di questo: `()`, cui veniva preferito ed elogiato 
quest'altro: $(), tu te lo ricordi o lo sai il perche'?
 
-- 
Tanti saluti
 

 quest'altro: $(), tu te lo ricordi o lo sai il perche'?
 
Uhm... io preferisco $() perché mi risulta più visibile.
 
Non credo che ci siano motivi sostanziali per preferire una forma 
all'altra: anche la nidificazione è possibile in entrambi i casi. Credo 
sia solo una questione di semplicità nel trattare i caratteri usati nella 
sostituzione:
 
When  the  old-style backquote form of substitution is used, backslash 
retains its literal meaning except when followed by $, `, or \.  The 
first backquote not preceded by a  back‐slash terminates the command 
substitution. When using the $(command) form, all characters
between the parentheses make up the command; none are treated specially.
 
Col vecchio modo si deve quindi fare attenzione a tre casi particolari; 
col nuovo modo si va tranquilli ad occhi chiusi.
