Hlavní navigace

Jak na hromadné nahrazování textu? (2)

Leoš Literák

V minulém díle jsem popsal skript na dávkovou změnu textu. Použil jsem při tom perl, find a vi. V tomto článku ukážu dva další způsoby, jak udělat totéž jinými způsoby, přičemž algoritmus Ondry Surého je nejefektivnější. Berte tyto tři možnosti jako důkaz flexibility unixu.

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á

  1. provádět automatickou výměnu textu ve všech souborech splňujících danou podmínku
  2. být přehledný a snadno použitelný
  3. být vhodný i pro začátečníky bez znalostí jednotlivých programů
  4. být rychlý

Uzávěrka je v pátek 4.6.1999. Své příspěvky posílejte na adresu literakl@seznam.cz.

Leoš Literák
Linux Hardware

Našli jste v článku chybu?

24. 3. 2009 23:17

Jo, taky bych chtěl dělat v sedu víceřádkové náhrady, ale nemůžu se dobrat, jak na to. Stačilo by prostě dát celý soubor do pattern space a bylo by... kdyby to sed uměl. (zdá se, že neumí)

6. 6. 1999 23:57

Jiří Svatoň (neregistrovaný)

Teď poněkud uhýbáte. Ten příklad s (a href=) jsem zvolil jenom pro jednoduchost. Jak jsem uz psal, jde mi obecně o víceřádkové náhrady, přesněji o náhrady, kde konec řádku nehraje roli (stejně jako v HTML kódu).
Mimochodem, já v tom mém textu nikde nepsal, ze v tom (a href=) chci měnit jenom obsah toho href, co když jsem chtěl místo celého tagu (a href=) dát něco jiného (třeba SSI sekvenci, nebo javascript, které ho vygenerují) :-)
A na konci jsem úplně konkrétně psal, že jsem na to narazil při …

Root.cz: Nová třída SD karet A1 s vysokým výkonem

Nová třída SD karet A1 s vysokým výkonem

DigiZone.cz: R2B2 a Hybrid uzavřely partnerství

R2B2 a Hybrid uzavřely partnerství

DigiZone.cz: SES zajistí HD pro M7 Group

SES zajistí HD pro M7 Group

Vitalia.cz: To nejhorší při horečce u dětí: Febrilní křeče

To nejhorší při horečce u dětí: Febrilní křeče

120na80.cz: Rovnátka, která nejsou vidět

Rovnátka, která nejsou vidět

DigiZone.cz: Sat novinky: slovenská TV8 HD i ruský NTV Mir

Sat novinky: slovenská TV8 HD i ruský NTV Mir

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

DigiZone.cz: V Plzni odstartovalo Radio 1

V Plzni odstartovalo Radio 1

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Vitalia.cz: Jak vybrat ořechy do cukroví a kde mají levné

Jak vybrat ořechy do cukroví a kde mají levné

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

Měšec.cz: Exekuční poradna: ptejte se online

Exekuční poradna: ptejte se online

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Vitalia.cz: Potvrzeno: Pobyt v lese je skvělý na imunitu

Potvrzeno: Pobyt v lese je skvělý na imunitu