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

Linux, Unix, BSD systémy, distribuce, open source

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Petr_S 3. 9. 2008 15:29

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?
Petr_S
Pokročilý

Odeslat příspěvekod lurk3r 4. 9. 2008 13:55

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
Moderátor diskuzního fóra Živě.cz

If there is no space left on the device, there must be some space right ...
Co říká bezpečnostní software chycenému červovi? "Jsi zatčen! A nezkoušej na mě žádný fork()y!"
lurk3r
VIP uživatel
Uživatelský avatar

Odeslat příspěvekod Wiskas 4. 9. 2008 15:00

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
For God doth know that the day ye eat thereof yer eyes shall be opened and ye shall be as gods, knowing good and evil.
Wiskas
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků