Newsgroup: it.comp.os.linux.iniziare
Titolo: Sostituire un carattere in piu' file

Avrei la necessita' di sostituire un carattere presente in piu' file 
(tutti pero' all'interno di una dir). Ovviamente mi servirebbe farlo 
senza aprire tutti i file, visto che sono molti.
So quasi per certo che per fare cio' occorrera' usare sed ed awk (o 
probabilmente tr), ma dopo parecchie lunghe occhiate alle varie 
man-pages abbiamo deciso che ci siamo reciprocamente antipatici :-) 
soprattutto per colpa delle loro cugine (le espressioni regolari).
Chi mi puo' indirizzare sulla via giusta?
-- 
ciao            |visita
                 |
http://www.sifor.it
gelty           |
http://www.sifor.com
-------------------------------------
E' esplicitamente vietato usare l'indirizzo e-mail di questo messaggio
per fini diversi dalla risposta al messaggio stesso (Art. 10 DL. 171/98).

 senza aprire tutti i file, visto che sono molti.
for FILE in `ls` ; do
	sed 's/caratteredacercare/caratteredaostituire/g' $FILE > $FILE.new
	# mv $FILE.new $FILE
done
se i file .new sono ok rifi togliendo il #.
Davide


Davide,
   mi provi il tuo sistema su una directory che contiene un file creato con:
touch "a b"
e mi dici il risultato?
Questo sistema funge:
ls | while read f; do
 sed 's/caratteredacercare/caratteredaostituire/g' "$f" >"$f.new"
done
Oppure, se e` proprio un carattere che va cambiato (per esempio cambiare
"a" in "b"):
ls | while read f; do
 cat "$f" | tr a b >"$f.new"
done
Lo script per rimettere i "b" in "a" lo lascio per esercizio. Chi si vuole
cimentare? ;-)
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

Davide Bianchi ha scritto:

Tutto perfetto, grazie mille!
Solo che ora sorge un problema: i file sono stati editati in win, e i 
caratteri che vorrei cambiare sono praticamente le lettere accentate.
Il problema e' che mentre i programmi in modalita' grafica riescono 
tranquillamente a visualizzarli, in console non vengono riconosciuti.
Infatti vengono visualizzati come quadratini, e se li cerco in console 
non vengono trovati.
Suggerimenti su come risolvere la cosa?


 Suggerimenti su come risolvere la cosa?
Crea uno shell script dove metti il sed (o il tr) con cut-and-paste
all'interno dell'editor (per esempio in Emacs), ovviamente aprendo
contemporaneamente lo script ed uno dei files che contiene la(e)
lettera(e) accentata(e). Altrimenti potresti provare dallo shell
(cat di un file, select and paste) ma non ti assicuro niente.
P.S. Occhio ai files il cui nome contiene spazi (molto comuni su Win).


 touch "a b"
Se i nomi dei file contengono spazi devi aggiungere un bel
IFS="
"
prima di tutto.
Davide

 (cat di un file, select and paste) ma non ti assicuro niente.
Strano a dirsi, ma non funziona, almeno con le prove fatte con grep.
?Infatti se nella dir faccio
$ grep à *
non trova nulla.
$ grep Qualit *
testo.php:<cut del testo...> Qualit[]Aziendale <...cut>
...
...
dove [] e' il famigerato quadratino.
Copiandolo nel grep:
$ grep [] *
non trova ancora nulla.
Aprendo il file con vim le lettere accentate vengono visualizzate 
correttamente, sia facendo partire la shell in modalita' grafica, sia 
facendo partire il sistema senza X.
Non so piu' dove sbattere la testa. Sto iniziando ad aprire i file ad un 
ad uno con vim (dove faccio un veloce :%s/à/&agrave;/ e via dicendo).
A proposito, e' possibile mettere in uno script questi parametri per vim?


 Strano a dirsi, ma non funziona, almeno con le prove fatte con grep.
Allora usa tr e dagli l'input in ottale (usa od per trovare il codice
ottale dei caratteri che vuoi sostituire...).
Buona fortuna,


 ottale dei caratteri che vuoi sostituire...).
Grazie, ma ormai ho fatto aprendo i file in vim e sostituendo tutte le 
varie occorrenze (non erano tantissimi, una cinquantina, ed in una 
mezz'oretta li ho terminati).
Comunque vedro' quello che riesco ad ottenere, perche' il problema 
potrebbe ripresentarsi.
Grazie per avermi suggerito od che non conoscevo.
