Newsgroup: it.comp.os.unix
Titolo: rimpiazare ogni occorrenza di un "string" per un'altro tutti i file

Ciao a tutti ! Per piacere vorrei sapere comme fare per rimpiazare ogni
occorrenza di un "string" per un'altro in tutti i file sotto un nodo
dell'arborescenza.
io uso Solaris 2.6 in una Sun MicroSystems
Per esempio io vorrei rimpiazare le string "Monza" per "Milano" in tutti i
file del directory C:\Italia\
Grazie
Octavio

 file del directory C:\Italia\
aaaahhh... che windozata agghiacciante!!! :))
beh, comunque prova questo:
----------------------------------------------------------
#!/bin/sh
prg=`basename $0`
test $# -ne 3 && echo usage: $prg str1 str2 directory && exit 1
one_file()
{
ed -s $1 << EOF
1,\$s/$str1/$str2/g
w
EOF
}
str1=$1
str2=$2
ldir=$3
for file in `ls $ldir`
do
 echo "processing... "$file
 one_file $file
done
------------------------------------------------
ciao
Alex F.
randall...@yahoo.com

 prg=`basename $0`
[cut] ...
che è tutta 'sta roba ;))) via, via di qui ... guarda:
cat ./Italia | sed -e s/monza/milano/ > ./Italia
devo ammettere che questa riga contiene un bug ... sed in questo caso
esegue una sola sotituzione per ogni riga. Quindi nel caso la riga
contenesse la parola monza più di una volta, quelle sucessive alla prima
verrebbero ignorate. In pratica bisogna eseguire il comando più volte
per essere sicuri ;)) oppure trovare l'opzione giusta per fargli fare
tutte le sostituzioni.
-- 
+-------------------------------------------------------------+
|    ~Massimiliano ADAMO      | Yahoo!Messenger: quetzalco_it |
| maxadamo [at] iol [dot] it  | ICQ# 103417788                |
+-------------------------------------------------------------+

 devo ammettere che questa riga contiene un bug ...
Oh, anche più di uno ... :))
Fabio



no caro ... con la shell bash, funziona egregiamente.
I problemi possono essere solo di due tipi:
1) tu non sai riscrivere e quindi non ti funziona ;))
2) hai più di una ricorrenza per riga ...


 oppure trovare l'opzione giusta per fargli fare tutte le sostituzioni.
...e perche' non ce lo dici tu qual'e'? ;)
ciao
Alex F.
randall...@yahoo.com

 2) hai più di una ricorrenza per riga ...
Il *mio* cat sulla *mia* bash non lavora su una directory.
Il tuo ? :)
Fabio

 Il tuo ? :)
non avevo visto che Italia era una directory ... mi sembrava fosse un
file.


 verrebbero ignorate. In pratica bisogna eseguire il comando piů volte


 ha scritto nel messaggio
news:9omu9g$vss$1...@s1.read.news.oleane.net...


io uso Solaris 2.6 in una Sun MicroSystems
In una shell di tipo bourne farei piu` o meno questo - dopo
essermi spostato nella dir in questione ("arborescenza"!?):
for i in *
do
cp $i ${i}_ZZZ
sed -e 's/string1/string2/g' ${i}_ZZZ > $i
done
Si potrebbe fare anche utilizzando "ed" e il sistema degli here
documents ma in questo modo salvi anche i vecchi file - non si
sa mai. Se vuoi anche i file nascosti fai `ls -a` al posto di *.
E comunque PRIMA di un comando del genere salva in altra dir i
files originali - basta un errore di battitura a fotterti (in una
dir di prova con qualche file inutile scrivi per errore "co" al
posto di "cp" e poi leggi i file che ne risultano...).
Naturalmente "man sh" e "man sed" per i particolari.
-- 
 Bye, Johnny   |   PCC lives!                              
jb...@kaosmic.net
 --------------+------------------------------------------------------------
   Free your   |   "If you like it you catch it"
      fry      |       - Johnny -