Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem linux sed

Ahoj, v proměnné $a a $b mám libovolný text , který může obsahovat i lomítka. Chci nahradit text na stdin, tak aby před ním a za ním byl definovaný text $a a $b
Trápí mě tahle věc: echo "...." | sed "s/^/!!!" - jak mám místo 3 vykřičníků dostat text $a, aby došlo ka nahrazení a udělat to elegantně, čímž nemyslím tuto prasárnu na stackoverflow, kdy se musí několikraát použít sedn http://stackoverflow.com/questions/407523/escape-a -string-for-a-sed-replace-pattern (zatím mám verzi, kde jen nahrazuji počátek)

Předmět Autor Datum
nieco taketo? a="rasin" b="noob" echo " je " | sed -E "s/(.*)/$a\1$b/g"
wam_Spider007 31.03.2014 17:30
wam_Spider007
Zvolil jsi špatný příklad, kdy proměnná a nebo b NEOBSAHUJE lomítka a speciální znaky. Já právě potř…
Rašín 11.04.2014 17:31
Rašín
musíš to prohnat nadvakrát. Poprvé použít např. právě ten hash (nebo dvojtečku) a nahradit všechna l…
touchwood 11.04.2014 22:13
touchwood
Jenže tohle se mi zdá postup z **dele. Vždyť to je proti zdravému rozumu.
Rašín 11.04.2014 23:43
Rašín
sed prostě neumí akceptovat (nemá "vnější přepínač") na literálový výraz, jako to má např. findstr v… poslední
touchwood 12.04.2014 08:33
touchwood

Zvolil jsi špatný příklad, kdy proměnná a nebo b NEOBSAHUJE lomítka a speciální znaky. Já právě potřebuji, aby pokud replacement obsahuje lomítka, aby to neshořelo...

příklad pokud a= p/p , potom
sed "s/hledat/$a/ se rozvine na
sed "s/hledat/p/p/" a dojde k havárii

jo a nápad použít sed s#hledat#$a# problém neřeší, co kdyžáhodou $a bude mít navíc i hashe...

musíš to prohnat nadvakrát. Poprvé použít např. právě ten hash (nebo dvojtečku) a nahradit všechna lomítka literálem (\/), předtím si ověřit, že daný znak se v textu nevyskytuje (podle toho by asi bylo vhodné podmíněně zkonstruovat sed výraz (skript).

sed prostě neumí akceptovat (nemá "vnější přepínač") na literálový výraz, jako to má např. findstr ve Windows.

Řešením je buď dvojí použití (obezlička), použít for cykly, grep, apod., nebo použít něco řádově účinnější nástroj typu awk.

Zpět do poradny Odpovědět na původní otázku Nahoru