View previous topic :: View next topic |
Author |
Message |
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4795 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Mon Sep 12, 2005 8:45 pm Post subject: [sed - redirezione bash] Accesso simultaneo read-write [ok] |
|
|
Sto cercando di modificare i file nella cartella /etc/portage con comandi del tipo:
Code: |
# cat /etc/portage/package.keywords| sed s/x86/amd64/ >/etc/portage/package.keywords
# sed s/x86/amd64/ < /etc/portage/package.keywords >/etc/portage/package.keywords
# sed s/x86/amd64/ /etc/portage/package.keywords >/etc/portage/package.keywords
|
Purtroppo, però, ottengo un file vuoto, anche se, eliminando il redirect finale, l'uscita verso standard-output appare corretta.
Se uso un file di output diverso dal file di input, ottengo il comportamento corretto. Ma in quel caso dovrei eseguire un mv per ricollocarlo dove desidero. Io vorrei riuscirci in una mossa sola.
La consultazione di manuali vari non mi ha chiarito le idee.
Quale sarebbe il modo corretto di usare il comando?
E perché la mia sintassi produce quel risultato? _________________ vu vu vu
gentù
mi piaci tu
Last edited by cloc3 on Tue Sep 13, 2005 9:49 am; edited 3 times in total |
|
Back to top |
|
|
.:chrome:. Advocate
Joined: 19 Feb 2005 Posts: 4588 Location: Brescia, Italy
|
Posted: Mon Sep 12, 2005 8:50 pm Post subject: Re: [sed] Non lavora come vorrei. |
|
|
non puoi leggere e scrivere dallo stesso file. vedrai che se ti fai stampare a video l'output, invece che scriverlo su file, andrà tutto bene.
dovresti usare un file intermedio e poi rinominarlo sovrascrivendo il vecchio |
|
Back to top |
|
|
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4795 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Mon Sep 12, 2005 8:52 pm Post subject: Re: [sed] Non lavora come vorrei. |
|
|
k.gothmog wrote: | non puoi leggere e scrivere dallo stesso file. vedrai che se ti fai stampare a video l'output, invece che scriverlo su file, andrà tutto bene.
dovresti usare un file intermedio e poi rinominarlo sovrascrivendo il vecchio |
Mi ero reso conto di quello che dici, ma ero ugualmente convinto che esistesse una via d'uscita.
Peccato. _________________ vu vu vu
gentù
mi piaci tu |
|
Back to top |
|
|
.:chrome:. Advocate
Joined: 19 Feb 2005 Posts: 4588 Location: Brescia, Italy
|
Posted: Mon Sep 12, 2005 8:59 pm Post subject: Re: [sed] Non lavora come vorrei. |
|
|
mi spiace... se c'è non la conosco... a questo punto siamo in due, quindi se qualcuno ci da una dritta fa felici due persone in un colpo solo |
|
Back to top |
|
|
randomaze Bodhisattva
Joined: 21 Oct 2003 Posts: 9985
|
Posted: Mon Sep 12, 2005 9:40 pm Post subject: Re: [sed] Non lavora come vorrei. |
|
|
k.gothmog wrote: | mi spiace... se c'è non la conosco... a questo punto siamo in due, quindi se qualcuno ci da una dritta fa felici due persone in un colpo solo |
Per fare tutto in un colpo con sed credo non ci sia modo.
Per fare tutto in culpo dovrebbe essere possibile con gli one-liner perl _________________ Ciao da me! |
|
Back to top |
|
|
neon l33t
Joined: 04 Aug 2003 Posts: 759 Location: Catania, Italy, Europe
|
Posted: Mon Sep 12, 2005 9:49 pm Post subject: |
|
|
Mettiti l'anima in pace, non puoi leggere e scrivere contemporaneamente dallo stesso file (a meno che non passi da un buffer).
Ma eseguire un mv alla fine ti infastidisce tanto? _________________ Io credo che le tecnologie siano moralmente neutrali fino a quando non le utilizziamo - William Gibson
LINEE GUIDA DEL FORUM |
|
Back to top |
|
|
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4795 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Tue Sep 13, 2005 6:53 am Post subject: |
|
|
neon wrote: | Ma eseguire un mv alla fine ti infastidisce tanto? |
Moltissimo .
Scherzi a parte, il problema è che non conosco il codice sotteso a queste operazioni, nè sono in grado di studiarmelo. Sono quindi costretto a chiedere spiegazioni. Quello che mi aspettavo è che le operazioni di lettura e scrittura avvenissero sequenzialmente nel tempo, in modo indipendente:
1. Open in lettura e creazione di uno stream di input.
2. Caricamento in ram dello stream di input. Chiusura dello stream e successiva elaborazione dei dati.
3. Open in scrittura e fine del programma.
Da quanto mi dite non è così.
Però trovo un po' contraddittorio il fatto che, chiamando una redirezione dell'output in append, anziché in overwrite (cioè con il simbolo >>) il comportamento sia esattamente quello atteso: l'append avviene correttamente, senza svuotare il contenuto originale.
Qualcuno saprebbe spiegare perché le cose stanno proprio in questo modo? _________________ vu vu vu
gentù
mi piaci tu |
|
Back to top |
|
|
IlGab Guru
Joined: 26 Nov 2004 Posts: 486
|
Posted: Tue Sep 13, 2005 7:06 am Post subject: |
|
|
Chiedo perdono.. ma non devi usare i >> al posto del > singolo ? Altrimenti non accodi nulla nel file e hai come risultato del file solo l' ultima riga parssata da sed
Comunque file di output diverso e poi vai di mv |
|
Back to top |
|
|
bender86 Guru
Joined: 18 Mar 2005 Posts: 484
|
Posted: Tue Sep 13, 2005 7:25 am Post subject: |
|
|
cloc3 wrote: | Qualcuno saprebbe spiegare perché le cose stanno proprio in questo modo? |
Probabilmente bash apre prima il file in lettura, e poi in scrittura (non in append, ma troncando il file), e poi esegue il comando (sed in questo caso), legge il file e gli manda il suo contenuto in input. Quindi, prima che il comando sia eseguito e che il contenuto del file sia letto, il file è già stato troncato. Non prenderla per verità, ma penso funzioni così.
Se non ti va di usare mv, potresti usare una variabile: Code: | NUOVO=`sed s/x86/amd64/ /etc/portage/package.keywords` && echo NUOVO > /etc/portage/package.keyword && unset NUOVO |
|
|
Back to top |
|
|
xchris Advocate
Joined: 10 Jul 2003 Posts: 2824
|
Posted: Tue Sep 13, 2005 7:25 am Post subject: |
|
|
direi proprio di no..
l'output di sed .. e' N linee...
quindi > scrive N linee.
ciao _________________ while True:Gentoo() |
|
Back to top |
|
|
fabius Guru
Joined: 29 Nov 2004 Posts: 525
|
Posted: Tue Sep 13, 2005 8:30 am Post subject: Re: [sed - o redirezione bash] Accesso simultaneo in read-wr |
|
|
cloc3 wrote: | Code: |
# cat /etc/portage/package.keywords| sed s/x86/amd64/ >/etc/portage/package.keywords
# sed s/x86/amd64/ < /etc/portage/package.keywords >/etc/portage/package.keywords
# sed s/x86/amd64/ /etc/portage/package.keywords >/etc/portage/package.keywords
|
|
Consiglio man sed, intanto prova a fare così
Code: |
# sed -i -e 's/x86/amd64/' /etc/portage/package.keywords
|
|
|
Back to top |
|
|
xchris Advocate
Joined: 10 Jul 2003 Posts: 2824
|
Posted: Tue Sep 13, 2005 9:09 am Post subject: |
|
|
interessante -i _________________ while True:Gentoo() |
|
Back to top |
|
|
cloc3 Advocate
Joined: 13 Jan 2004 Posts: 4795 Location: http://www.gentoo-users.org/user/cloc3/
|
Posted: Tue Sep 13, 2005 9:47 am Post subject: Re: [sed - o redirezione bash] Accesso simultaneo in read-wr |
|
|
fabius wrote: |
Consiglio man sed, intanto prova a fare così
Code: |
# sed -i -e 's/x86/amd64/' /etc/portage/package.keywords
|
|
Adesso ho capito!!!
Code: |
cloc3@linux17 ~ $ man sed
cloc3@linux17 ~ $ echo pippo >pippo.txt
cloc3@linux17 ~ $ sed -i -e s/pippo/peppo/ pippo.txt
cloc3@linux17 ~ $ cat pippo.txt
peppo
|
Grazie, non avevo saputo leggere l'istruzione! _________________ vu vu vu
gentù
mi piaci tu |
|
Back to top |
|
|
randomaze Bodhisattva
Joined: 21 Oct 2003 Posts: 9985
|
Posted: Tue Sep 13, 2005 7:53 pm Post subject: |
|
|
Uh, sono arrivato tardi
Code: | perl -i -pe 's/x86/amd64/g' /etc/portage/package.keywords |
_________________ Ciao da me! |
|
Back to top |
|
|
|