Portál AbcLinuxu, 25. dubna 2024 10:28


Dotaz: sed & bash escape hell

14.1.2008 17:35 depka
sed & bash escape hell
Přečteno: 518×
Odpovědět | Admin
zdravim potrebuji nahradit ve zdrojacich retezec demo_ vyskytujici se v radcich obsahujici $sql = ..., retezcem TABLE_PREFIX

pokud radek zacina .*$sql = "(dvojite uvozovky) prepisu na ".TABLE_PREFIX."
pokud radek zacina .*$sql = '(apostrof) potrebuji prepsat na '.TABLE_PREFIX.'

prvni problem z dvojityma uvozovkama sem vyresil timhle:
sed -i~ -e 's/\(.*\$sql \?= \?".*\)demo_\(.*\)/\1".TABLE_PREFIX."\2/g' *
nedari se mi vsak zapsat prikaz pro druhy problem s apostrofem
dekuji
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

14.1.2008 17:45 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: sed & bash escape hell
Odpovědět | | Sbalit | Link | Blokovat | Admin
sed -i~ -e 's/\(.*\$sql \?= \?".*\)demo_\(.*\)/\1'"'"'.TABLE_PREFIX.'"'"'\2/g' *

Je to sice divný, ale bash to vezme - prostě na sebe napojím 2 řetězce a jeden je uzavřen v úvozovkách a druhý v apostrofech.

I am always ready to learn although I do not always like to be taught. (W. Churchill)
14.1.2008 17:59 depka
Rozbalit Rozbalit vše Re: sed & bash escape hell
jeste treba tu prvni " vymenit za ' takze nakonec:
sed -i~ -e 's/\(.*\$sql \?= \?'"'"'.*\)demo_\(.*\)/\1'"'"'.TABLE_PREFIX.'"'"'\2/g' *
diky :)
David Watzke avatar 14.1.2008 18:04 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: sed & bash escape hell
A když sedu předáš -r, ušetříš si dost escapování a nebude v tom takovej zmatek :-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
14.1.2008 18:08 Ash | skóre: 53
Rozbalit Rozbalit vše Re: sed & bash escape hell
Když už je to uvnitř řetězce samý apostrof, nebylo by lepší uzavřít to celé rovnou do uvozovek? V tomhle aby se prase vyznalo :/
14.1.2008 18:19 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: sed & bash escape hell
V tomhle aby se prase vyznalo :/

Ale funguje to :-). Ale vážně - nevypadalo to, že by se tohle řešení mělo nějak archivovat (myslím do skriptu nebo tak), takže (tolik) nevadí, že to je nečitelné. Navíc, při ohraničení uvozovkami se zase musí kontrolovat shellovské wildcardy (tedy escapovat a zde se to začne míchat s tím sedovským) - takže je to IMHO prašť jak uhoď.

I am always ready to learn although I do not always like to be taught. (W. Churchill)
14.1.2008 18:33 depka
Rozbalit Rozbalit vše Re: sed & bash escape hell
s dvojityma uvozovkama sem to zkousel snad pul hodiny, ale escapoval jsem apostrof protoze v manualu bashe je psane:
Enclosing characters in double quotes preserves the literal value of all characters within the quotes, with the exception of $, ‘, \,

kde jsem tento znak ‘ povazoval za apostrof ' :/
14.1.2008 18:04 Ash | skóre: 53
Rozbalit Rozbalit vše Re: sed & bash escape hell
Odpovědět | | Sbalit | Link | Blokovat | Admin
Snadné:
sed -i~ -e "s/\(.*\$sql \?= \?\".*\)demo_\(.*\)/\1\".TABLE_PREFIX.\"\2/g" *
sed -i~ -e "s/\(.*\$sql \?= \?'.*\)demo_\(.*\)/\1'.TABLE_PREFIX.'\2/g" *
14.1.2008 18:10 Ash | skóre: 53
Rozbalit Rozbalit vše Re: sed & bash escape hell
Nebo samozř. ten první tak jak jste to měl:
sed -i~ -e 's/\(.*\$sql \?= \?".*\)demo_\(.*\)/\1".TABLE_PREFIX."\2/g' *
sed -i~ -e "s/\(.*\$sql \?= \?'.*\)demo_\(.*\)/\1'.TABLE_PREFIX.'\2/g" *

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.