Newsgroup: it.comp.os.linux.sys
Titolo: sostituire testo in piu' files [lungo]

salve a tutti, ho un problema sul quale ho gia' perso una intera giornata e
spero, con l'aiuto di qualcuno, di non perdere altro tempo.
Ho scaricato un intero sito per motivi che non sto ad elencare (pacifici,
cmq, x studio) e vorrei navigarlo in santa pace sul mio pc, ma chi lo ha
fatto, ha previsto nel codice html delle pagine (quelle direttamente
interessate sono ben 790, il totale e' di 900 MB, con gli altri files) una
specie di trappola che manda in tilt il browser. Individuata la trappola ed
editato il file html con un banale editor di testo, commentato il rigo
incriminato con !, la pagina e' visualizzata perfettamente.
Non potendo ripetere tale operazione per 790 file, volevo automatizzarla.
L'unica maniera, non volendo scrivere un programma, e' linux, ma, se cercare
tutti i file contenenti una stringa e' facile, sostituirla in serie non lo
e' affatto. Da os non c'e' nulla, che io sappia (e sto pregando che mi
smentiate).
Allora il buon vecchio vi.
Qui viene il bello:
leggendo l'help di vi si trova che ci sono dei comandi automatici, che
l'utente puo' impostare sul suo file .vimrc
pero' tale file nascosto non esiste, bensi' esiste vimrc in
/usr/share/vim/vim61/macros
Salvato il vecchio, faccio il mio nuovo in versione prova per file tx e txt
(come per htm ed html), in cui alla stringa ladonnaeputtana va sostiutito
nonpercolpamapernatura.
Se questa stringa e' presente nei file pippo.tx, prova.txt, hey.txt, il mio
ragionamento e' di fare:
vi *.tx*
mentre in vimrc ho settato:
:autocmd!
:autocmd FileReadPost *.tx* exe ":%substitute/puttana/troia/
:autocmd FileWritePre *.tx* exe ":wnext"
ma non funzionano ne' la sostituzione, ne' la scrittura e passaggio al
successivo.
Per pietą (sono esausto) dove sbaglio?
Dove sbaglio per vi?
Nel so c'e' qualche funzione da guru che mi salva?
Grazie.


I'm not prejudiced, I hate everyone equally.


<script>
if (window.top == window.self) {
   self.location=self.location+"?p";
}
manda il tilt il browser... qualsiasi browser :(
se si pone il simbolo ! davanti alla riga if.... questa diventa un commento
et voila'.
Si sempre la stessa riga.
Ho cercato di capire sed dalle ldr, ma erano scarse al proposito, pero'
usato con vi (certamente sbagliavo) mi diceva che non poteva operare la
sostituzione perche'  l'output non era std... insomma vuole per forza output
su schermo.
Ho provato ha dare i comandi giusti a vi da file, con reindirizzamento, ma
non si fa i fatti suoi e dice in sostanza: preservo il file perche' l'input
non e' da tastiera.
Cmq, questo solo per mostrare che ne ho provate di strade... mi serve un'
idea nuova.
Come potrei usare sed?
devo cambiare la riga:
if (window.top == window.self) {
con la riga:
!if (window.top == window.self) {
in circa 800 file .htm e .html. in una sola botta.
!

 in circa 800 file .htm e .html. in una sola botta.
fai un ciclo con ls o find ...
ciao ....


>>:/OuZ\:<<< 
per rispondermi in mail rimuovere TOGLIQUESTO


wow! :-)
Grazie, mille. Ne approfitto per ringraziare anche Antonio barbone.

 et voila'.
1) disabilita javascript nel tuo Web browser (come dipende dal browser)
2) Mettiamo che i files siano nella directory /originali e vuoi modificarli e
salvarli in /nuovo:
cd /originali 
find . -name \*.html -exec sed 's/^if (window.top == window.self)/!if (window.top == window.self)/' {} >/nuovo/{}\;
Poi verifichi i files su /nuovo e cancelli /originali
Questo se e` una directory flat. Se invece esistono sottodirectory allora
bisogna crearle. O con find oppure basta duplicare /originali (ad esempio
con tar).
Ciao,
-- 
       Roberto Divia`             Love at first sight is one of the greatest
       =============             labour-saving devices the world has ever seen.
Mailbox: C02110                 CERN-European Organization for Nuclear Research
E-mail: 
Robert...@cern.ch
           CH-1211 GENEVE 23, Switzerland

 
la ricetta "pratica" te la hanno già data.
Per avere altre ricette "pratiche", vedi
http://www.unixguide.net/unix/sedoneliner.shtml
Più in generale vedi "man ed" che è il paleo-editor da cui 
deriva sed. Vi, invece, deriva da ex.
Qusto comporta alcune piccole differenze la sintassi dei
comandi di sed e vi.
ciao, andrea