Poišči & Zamenjaj besedilo v več dokumentih iz ukazne vrstice
Če ste zadovoljni z ukazno vrstico in ste kdaj v situaciji, ko morate najti in zamenjati besedo, besedno zvezo, URL ali znak v skupini več dokumentov z besedilom, perl precej dobro opravi svoje delo. Preprost ukazni niz bo zelo hitro izvedel skupinsko paketno iskanje in zamenjavo besedila, bodisi v enem samem dokumentu bodisi v skupini več dokumentov.
Kot pri mnogih stvareh v ukazni vrstici tudi tu ni postopka potrditve, zato se pred začetkom ukaza prepričajte, da je vaša sintaksa pravilno nastavljena, sicer boste morda morali narediti še eno iskanje in zamenjavo da popravim vašo tipkarsko napako.
Osnovna sintaksa ukaza je naslednja: perl -pi -w -e 's/THIS/THAT/g;' /path/to/files.txt
Za primer ene besede, če morate v vsaki datoteki .txt zamenjati vse primerke »ogre« s »cornbread« v mapi »Dokumenti«, potem bi uporabili naslednji ukaz:
perl -pi -w -e 's/ogre/cornbread/g;' ~/Dokumenti/.txt
Za primer iskanja in zamenjave celotne fraze predpostavimo, da bomo zamenjali celoten stavek »Tovarna čokolade « s »Čarovnik iz Oza« v skupini datotek .txt, ki se začnejo s »Filmi«, shranjene v imeniku Dokumenti:
perl -pi -w -e 's/Tovarna čokolade/Čarovnik iz Oza/g;' ~/Dokumenti/Filmi.txt
Iskanje in zamenjava se izvedeta takoj. Spremembo lahko dvakrat preverite z uporabo cat in grep za preverjanje:
cat ~/Documents/Films124.txt |grep Čarovnik iz Oza"
Res je, da je to dokaj napredno in da, paketno iskanje in zamenjavo v več dokumentih je mogoče izvesti na uporabniku prijaznejši način z aplikacijami GUI, kot sta TextWrangler in BBEdit, včasih pa je ukazna vrstica le hitrejša za hitra opravila, kot je ta in druga podobna, poleg tega pa za uporabo ne potrebuje dodatnih prenosov.
Velik palec gor Lifehackerju za odličen trik.
Posodobitev: Ukaz 'sed' je še en način za hitro iskanje in zamenjavo prek ukazne vrstice. Pokrivanje seda je večinoma tema za drug članek, vendar je osnovna sintaksa uporabe seda za to nalogo nekoliko preprostejša in si jo je zato lažje zapomniti:
sed -i 's/THIS/THAT/g' /path/to/files.txt
Ni pravega ali napačnega načina, zato je uporaba perl ali sed stvar osebnih preferenc.