[linux] Nahradzovanie zastupky obsahom subora
Vojtech Zachar
linuxak na realtime.sk
Pátek Prosinec 8 20:24:42 CET 2006
Dna Mon, Dec 04, 2006, Jaroslav Švelta napisal:
> Dobry den.
>
> Mam retazec, v ktorom su pouzite specialne zastupky pre nazvy suborov.
> Potreboval by som tieto zastupky nahradit obsahom suborov. Malo by to
> fungovat na zakladnych unixovych prikazoch, mam k dispozicii len msys.
> A bude sa to vsetko odohravat v ramci make subore.
>
> Napr.
>
> Mam text
> <table><thead>{include file='Header.tpl'}</thead>
> <tbody>{include file='Body.tpl'}</tbody></table>
>
> Namiesto {include file='Header.tpl'} by som potreboval
> vlozit obsah suboru Header.tpl
>
> Dakuje
> (js)
Hoj.
Co je msys?
Urcite sa to da robit jednoduchsie, ale zatial som prisiel iba na takyto
sposob cez sed.
Ak mozes pouzit sed, tak by som to urobil v 3 krokoch. Je to len na
inspiraciu no funguje to. :-)
Zdrojovy text nech je v subore s nazvom TEXT. Budem pouzivat 3 rozne
subory so sed skriptami (sedskriptX).
1. Vytvoris sedskript3, kde zapises pre kazdy "includovatelny" subor z
TEXTu intrukciu na jeho vypisanie (urobi to sedskript1 uvedeny nizsie)
Ces sort a uniq zabezpecis, ze pre jeden subor bude iba jedna
instrukcia
2. Kazdy riadok v TEXT obsahujuci include instrukciu prepises na 3
riadky, kde na prvom bude zaciatok, na druhom include subor a na
tretom koniec povodneho riadku. Mozes na to pouzit sedskript2
(nizsie).
3. Prejdes text vytvoreny v kroku 2 cez sedskript3 vytvoreny v kroku 1.
Vojto
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - -
Detaily:
1. (cat TEXT | sed -n -f sedskript1 | sort | uniq ;\
echo '/^YYYYYYYYYYY/d' ) > sedskript3
2.+3. cat TEXT | sed -f sedskript2 | sed -f sedskript3
kde
########### sedskript1 ########################
# zisti zoznam suborov na includovanie a vytvori sedskript3
s#^.*{include file='\([^\{\}]*\)'}.*$#/^YYYYYYYYYYY\1$/r \1#pg
########### sedskript2 ########################
/{include file=/h
# zapise na vystup prvu cast riadku pred {include
s/{include file=.*//p
x
/{include file=/h
# zapise na vystup cast riadku include
s/^.*{include file='\([^\{\}]*\)'}.*$/YYYYYYYYYYY\1/p
x
/{include file=/h
s/^.*{include file='[^\{\}]*'}\(.*$\)/\1/
Prepokladam, ze:
1. retazec YYYYYYYYYYY sa v tvojom TEXT subore nikde na zaciatku riadku
nenachadza
2. je v poriadku, ak rozdelim <thead>{include file='Header.tpl'}</thead>
na 3 casti
<thead>
obsah Header.tpl
</thead>
Další informace o konferenci linux