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)
nieco taketo?
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).
Jenže tohle se mi zdá postup z **dele. Vždyť to je proti zdravému rozumu.
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.