První reakci jsem obdržel od Honzy Dušáka (omlouvám se, jestli se mi nepovedl převod z cestiny do češtiny). Jeho skript používá pouze kombinace perlu a find:
find . -name „*.html“ -exec perl -i.bak -p -e „s/stare/nove/“ {} ;
Co to dělá? Kdykoliv find najde soubor, který splňuje zadaná pravidla, spustí perl ve speciálním modu. A ten pomocí svých interních regulárních výrazů provede záměnu. K tomuto skriptu bych měl výhradu, že se při každém nalezení souboru spouští perl, což je intepret. A ne zrovna malý. Navíc kdysi jsem psal nějakou aplikaci v perlu a rychlost vnitřních regulárních výrazů mě zklamala. Ale to se mohlo mezitím změnit.
Další dopis mi napsal Ondra Surý. Ten měl výhrady k volbě programů (eufemicky řečeno). Místo nich navrhl použít sed a shell.
#!/bin/sh
for $file in find . -name "*.html"
; do
echo -n „Zpracovávám soubor $file“;
mv $file $file.bak;
cat $file.bak | sed -e „s/XYZ/ABC/“ > $file
echo -n „hotovo.“
done
Tento skript je ve své podobě velmi podobný mému původnímu řešení. Místo perlu ale používá shell (rychlejší start, zabírá méně paměti) a místo vi program sed (rychlejší běh, méně použité paměti).
Jednočlenná komise ve složení Leoš Literák se jednomyslně shodla, že vítězem se stal Ondra Surý. Jeho řešení je nejefektivnější a nejpřehlednější (a já se po večerech budu učit programovat v shellu).
Tak mě napadá, co udělat menší soutěž. Pošlete mi své skripty, já je porovnám, otestuji a výsledky zveřejním. Skript má
- provádět automatickou výměnu textu ve všech souborech splňujících danou podmínku
- být přehledný a snadno použitelný
- být vhodný i pro začátečníky bez znalostí jednotlivých programů
- být rychlý
Uzávěrka je v pátek 4.6.1999. Své příspěvky posílejte na adresu literakl@seznam.cz.