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 :-)
* * * * * * * * * * * * *