Newsgroup: it.comp.os.linux.sys
Titolo: sostituire una riga in un file

Ciao a tutti.
Devo scrivere uno script bash che sostituisca una certa riga nel file di
configurazione di php.
Sostanzialmente se trova l'impostazione
register_globals = On
la deve impostare a Off e salvare il file.
Ho provato con:
# sed '/register_globals = On/s/^.*$/register_globals = Off/' php.ini
ma ovviamente non funzia.
Dove sbaglio?
Grazie
Luca

 Dove sbaglio?
Nel non leggere la man page di sed e la sua documentazione.
Davide
-- 
The Microsoft Motto: "We're the leaders, wait for us!" 


Si da il caso che l'abbia letto.
Ma siccome non sono nè intelligente nè (notoriamente) infallibile come te,
può essere che qualche aspetto mi sia sfuggito.
Luca

 Dove sbaglio?
La regexp cosi` non ha senso.
il formato di una regexp che sostituisce e`
s/regexp/replacement/
Non uso sed, ma tu hai scritto una cosa tipo
/regexp/regexp/regexp/regexp/
(ovvero, la "s" non la metti dove ti pare).
probabilmente con qualcosa tipo:
sed 's/^register_globals = On$/register_globals = Off' php.ini
dovrebbe funzionare.
Visto che questo e` un errore abbastanza "grosso", ti consiglio di
approfondire l'uso delle regexp, partendo da man 7 regex, per l'uso in
sed, e magari (meglio) man perlre.
-- 
                          Maurizio - Tannoiser - Lemmo
                 Founder Member of ERLUG 
http://erlug.linux.it
-------------------------------------------------------------------------------
There are two major products that come out of Berkeley: LSD and UNIX.


Oppure googla qualcosa tipo "sed modify text file"
Ciao,
luigi

> Ma siccome non sono nè intelligente nè (notoriamente) infallibile come te,
il fatto che scrivi su .sys è in contrasto col fatto che non conosci le
regole base di sed. 
nessuno è infallibile , tranne quelli che leggono i manuali ;-)
bye.
-- 
"Materassi SPERMAFLEX: non sono per dormire!"

 /register_globals/s/On/Off/g
Evidentemente l'aveva letta, altrimenti non gli sarebbe potuta venire in 
mente la cosa che ha provato e che ne' a me (che non conosco sed), ne' a 
Maurizio (che diceva la stessa cosa), e` venuta in mente, ma a te si`.
Grazie. Ho imparato una cosa su sed che me lo rende un po' piu` 
simpatico (piu` simile ad awk).
Le altre due sono che lui, dopo aver letto la manpage e aver provato, 
avrebbe potuto rileggerla o cercare su internet ulteriori info ed 
esempi. Ma anche postare qui non e` stato male, dato che ha ricevuto 
diverse risposte utili (non esclusa quella di Davide) e nemmeno la tua.
La seconda e` che, nonstante tu evidentemente conosca sed piu` di me, 
spesso non riesci a capire il senso delle cose che ti trovi davanti
(se provi ad osservare la sua espressione e la tua ti accorgerai che 
hanno parecchi elementi comuni, tanto che se alla sua aggiungi "g" alla 
fine funziona).
Andrea

Luca ha scritto:

Due righe sopra, ovvero:
 > ma ovviamente non funzia.
Perche' invece funziona anche se e` piu` elegante la soluzione del 
brillante Thorin.
Pero` non fa la sostituzione nel file, ma sullo stdandard output, per 
cui poi devi copiare questo sul tuo php.ini, usando un file temporaneo.
Ovvero:
Giusto perche' non garantisco, onde mettersi al riparo da effetti avversi:
# cp -a php.ini php.ini.save
poi
# TMP_FILE=`mktemp -t php.ini.XXXXXXXXXX`
# sed '/register_globals = On/s/= On/= Off/' php.ini >> $TMP_FILE
# mv -f $TMP_FILE php.ini
Andrea

Luigi Rosa ha scritto:

e poi, piu` in generale, se si ha a che fare con la bash:
http://howtos.linux.com/howtos/Bash-Prog-Intro-HOWTO.shtml
e soprattutto
http://howtos.linux.com/guides/abs-guide/index.shtml
Andrea

 segreto stava, appunto, nel leggere la man page.
Come ho detto, non uso sed, e questa sintassi non mi piace. Di solito,
ste cose le faccio oneliner in perl. Cmq, quella che avevo proposto io,
avrebbe funzionato?
-- 
                          Maurizio - Tannoiser - Lemmo
                 Founder Member of ERLUG 
http://erlug.linux.it
-------------------------------------------------------------------------------
I love this fucking job. This job loves fucking me.

 avrebbe funzionato?
sed 's/^register_globals = On$/register_globals = Off' php.ini
Quasi, ci voleva ancora un "/" dopo "Off" e prima di "'".
Non avrebbe funzionato se nella riga, prima  di "register_globals" ci 
fosse stato uno spazio (ma forse a quel punto non funzionava neanche per 
php), ma nemmeno se dopo "On" ci fosse stato uno spazio, mentre in 
questo caso credo che php  l'avrebbe letto senza problemi (forse anche 
nel primo).
Le ho provate tutte sotto cygwin con gnu sed 4.1.2 e anche quella di chi 
ha fatto la domanda iniziale funzionava, gia` cosi` com'era.
Andrea


Ti ringrazio per la risposta construttiva.
Ora ho capito il banale errore :-P. Saranno i troppi pranzi....
Ciao,
Luca

 dimenticato), caro :-)
Ok, grazie. (mi tornera` buono il giorno che ho una box senza perl,
ammesso che ne esistano... :))
Mi ero preoccupato di aver detto una totale corbelleria. ;)
-- 
                          Maurizio - Tannoiser - Lemmo
                 Founder Member of ERLUG 
http://erlug.linux.it
-------------------------------------------------------------------------------
And on the seventh day, He exited from append mode.

 e tagliente katana ;-)
E' l'era dell'ottimismo!!!!! :-)))))))))))))))))))))))))))))))))))))

 regole base di sed.
Non vorrei sembrare polemico, ma dove avrebbe dovuto scrivere? Una domanda
del genere non sarebbe andata bene in .software, mentre in .iniziare
sarebbe passata inosservata
Henryx
P.S. evvai, ho riaperto l'annoso problema della collocazione di questo ng!

 # mv -f $TMP_FILE php.ini
sed -i

 sarebbe passata inosservata
Ora non so come e` diventato .iniziare (e` un annetto che non lo
leggo), ma non penso che non ci siano persone che conoscono la
sintassi di *base* del sed.
Questa era da icoli, per me non c'e` dubbio.
-- 
Vuoi fare colpo su di lei con me?
Fai colpo su di lei con me! Fai colpo su di lei con me!
[Dr. Gonzo : Paura e delirio a Las Vegas]