[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