Dario savjetuje: zamjena teksta u mnoštvu datoteka

Problem

Zamjena nekog teksta (bilo kojeg niza slova, brojki i/ili drugih karaktera) drugim, u datoteci na disku, normalno se radi u nekom tekst editoru. Bolji tekst editori mogu napraviti zamjenu teksta u svim otvorenim datotekama (buffer-ima) ili u svim/nekim datotekama nekog direktorija. Dodatno, bolji tekst editori mogu napraviti zamjenu teksta upotrebom regularnih izraza.

Perl rješenje

Sintaksa naredbe može se razlikovati ovisno o operativnom sistemu, ljusci i verziji perl-a (primjer: na windows strojevima upotrebljavaju se dvostruki navodnici, na *nix normalno jednostruki). Za provjeru primjera korišten je ActiveState Corp. perl, v5.8.2 na Windows XP Proffesional, SP2, s instaliranom CygWin okolinom.

Kratki Perl programi sastavljeni samo od jedne linije nazivaju se "one-line"-ri. Parametar -e Perl interpreter-u kaže kako slijedi cijeli (entire) program u navodnicima.

perl -p -i -e 's/Dario/Branimir/g' *

Parametar -i određuje da se rezultati spreme u iste datoteke iz kojih je sadržaj uziman (čitan), a parametar -p znači kako se program treba izvršiti na svim redovima ulaznog teksta. Zvjezdica (asterisk) na kraju komande određuje datoteke koje će se obrađivati.

Operaciju zamjene (slovo s) specificira program naveden u navodnicima. Zamjenjuje se izraz "Dario" izrazom "Branimir" globalno (opcija g na kraju) u cijelom redu (ako ima više pojavljivanja teksta "Dario", svi se zamjenjuju). Delimiteri (znakovi koji označavaju početak i kraj) pojedinih dijelova su znakovi "/" (kosa crta, slash).

Ako treba sačuvati originalne datoteke, promjenom parametra -i možemo napraviti kopije originala. Primjer naredbe koja stavlja prefiks "orig_" ispred imena datoteke:

perl -p -i"orig_*" -e "s/Dario/Branimir/g" *

Primjer naredbe koja stavlja sufiks ".bak" iza imena datoteke (ne mijenja postojeći sufiks):

perl -p -i'*.bak' -e 's/Dario/Branimir/g' *

Pogledajte

Naslovna stranica