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