Stránka 1 z 1

Jak nahradit textový řetězec v mnoha souborech jiným?

Odeslat příspěvekNapsal: 3. 9. 2008 16:29
od Petr_S
Zdravím

doporučíte mi nějaký jednoduchý postup, jak nahradit v mnoha souborech v různých adresářích jeden řetězec jiným řetězcem? Kdyby to bylo do jiného souboru tak to může být nějaký sed s/stary/novy/g - ale když se má upravit přímo ten zdrojový soubor?

Re: Jak nahradit textový řetězec v mnoha souborech jiným?

Odeslat příspěvekNapsal: 4. 9. 2008 14:55
od lurk3r
Pouzij napr. nejaky skriptovaci jazyk (Python, Perl, Ruby ...) + bash.

Pomoci ls -R >> tree.tmp a nejakeho skriptiku si vypis seznam souboru (na kazdy radek jeden soubor s cestou - to musis udelat tim skriptem, upravit vypis ls -R). Potom vytvor skript, ktery ti otevre soubor, predany parametrem, pomoci regexpu upravi jeho cast, tak jak potrebujes a ulozi. A pak skriptik v bashi, ktery cte soubor s cestami(ls -R + skript) po radku a spousti skriptik, ktery jednotlive soubory upravuje.

pr.: Python prace s regexp-em
Kód: Vybrat vše
try:
   f = urllib.urlopen(url)
except:
   sys.exit('Chyba pri otevirani zadane url!')

fdata = f.read()

# zjisti imdbid filmu
reword = re.compile(r'idmovieimdb-[0-9]+')
for aword in reword.findall(fdata):
   reword = re.compile(r'[0-9]+')
   imDbID = reword.findall(aword)
# mam imdb
try:
   imDbID = int(imDbID[0])
except:
   sys.exit('ImDbID titulku nenalezeno!')


EDIT: nevim jestli je to dost jednoduchy, ale nic snazsiho me nenapada

Re: Jak nahradit textový řetězec v mnoha souborech jiným?

Odeslat příspěvekNapsal: 4. 9. 2008 16:00
od Wiskas
Podle mě by bylo jednodušší použít zmíněný sed + dočasný soubor. To jest něco jako

Kód: Vybrat vše
for foo in `find`
do
sed 's/stare/nove' $foo > tmpfile
mv tmpfile $foo
done