Posted By: Keson (Keson) on 'CZscripts'
Title:     Re: porblem s vnorenym sedem
Date:      Thu Oct 14 23:21:24 2004

> Zdar a silu,
Zmar a zkazu
(potvoram:-)
 
> mam sed prikaz, ktery ma v sobe vnoreny jeste jeden, a vypada takto:
> sed /^[[:space:]]*$LVALUE/{s/"[[:space:]]*$/:$RVALUE"/}
> pricemz $LVALUE a $RVALUE jsou promenne nastavene v shellu.
> 
> pokud ten prikaz pustim interaktivne, je vsechno ok (ucelem je najit radku 
> ktera zacina stringem 'lvalue="neco neco"' a za to posledni 'neco' 
> pridat pred ukoncujici uvozovku ':rvalue').
> 
> Pokud ale to same nacpu do scriptu, zarve to:
> 
> #!/bin/bash 
> LVALUE="promenna"
> RVALUE="hodnota"
> sed /^[[:space:]]*$LVALUE/{s/"[[:space:]]*$/:$RVALUE"/}
> 
> cobra@cobra-ws:~$ ./pitomyscript.sh
> sed: -e expression #1, char 58: unknown option to `s'
> 
> V cem je sakra problem? Uz jsem chtel rezignovat a pouzit misto promenne 
> $RVALUE primo jeji obsah, ale to funguje jen dokud to jsou jen pismenka, v 
> momente kdy tam chci dat lomitko nebo jiny special character ktery musi 
> byt uvozeny backslashem tak to zarve taky. 
> 
> Problem vidim v tom vnoreni, kdyz je to jednourovnovy sed prikaz, tak to 
> akceptuje. Neni na to nejaky figl?
> 
> Diky moc,
> Cobra 

shell IMHO pred tim nez spusti prikaz, tak
provede vsechny mozne substituce $PROMENNA, *.txt, apod.
(viz man bash - ohromne cteni:-)
a pak to teprve preda jako parametry novemu procesu (sedu)

takze: escapovat se musi :-(

#!/bin/bash 
LVALUE='promenna'
RVALUE='ho/d[n]*ota'

LVALUE=`printf "%s" "$LVALUE" | sed 's/([]/*[])/\\1/g'`
RVALUE=`printf "%s" "$RVALUE" | sed 's/([]/*[])/\\1/g'`


sed /^[[:space:]]*$LVALUE/{s/"[[:space:]]*$/:$RVALUE"/}

# anebo alternativne
# sed "s/^([     ]*$LVALUE[      ]*=.*)"[      ]*$/1$RVALUE"/"


                                              Keson
* * * * * * * * * * * * * 
  a stejne je hezky :-)
* * * * * * * * * * * * * 

Search the boards