Dne 23.4.2010 20:59, Dan Lukes napsal(a):
On 04/23/10 20:02, Zbyněk Burget:
sed
'/<device>/,/<\/device>/{/<device>/{h;D;};/<\/device>/{g;s/\n//g;p;D;};H;D;};'
SEDem asi takhle: '/XXXXXX/s;\(<enable>\).*\(</enable>\);\1yes\2;'
kde XXXX je vyraz, kterym bych vybral ten radek, ktery chci menit (ja uz
si presne nepamatuju zadani a tudiz podle ceho se spravny radek poznal)
Tak neco podobneho bych asi stloukl, ale takhle je to opravdu genialne
elegantni.
Jeste to ma jednu mouchu, ale to uz je drobnost (z vysledku vypadne
ukoncovaci tag </device>.
Aha, vypadlo pismenko
melo tam byt
{H;g;s/\n//g;p;D;}
...
sed je dost "jednosmerny" programovaci jazyk. Jde v nem (relativne)
snadno psat, ale z napsaneho nelze zjistit co to ma delat ;-)
tak to uz jsem zjistil davno - obcas poznat, co ma delat je nadlidsky
ukol - hlavne se vyznat v tech regularnich vyrazech - zmet lomitek,
tecek, carek, hvezdicek...
Ale ano, taky za to mohla moje chyba - misto toho, abych to napsal jako
1. /<device>/{zpracovani prvniho;continue}
2. /</device>/{zpracovani posledniho;continue}
3. (bez podminky) zpracovani tela a continue
mel jsme pocitat s tim, ze to po me budes cist a mel jsem to napsat jako:
1. /<device>/{zpracovani prvniho;continue}
2. /<\/device/!/ zpracovani tela a continue
3. (bez podminky) {zpracovani posledniho;continue}
Bylo by to o dost citelnejsi.
No, ted uz je mi to opravdu jasne - ja v prvni rade byl mimo, jak sed
zpraovaval cely ten vyraz - ted bych rekl, ze zacinam chapat, jak
vlastne funguje (konecne po letech... :-) )
Jak jsem psal, lide, kteri sed dokazou pouzivat v cele jeho krase (a
nejen jako obycejnou utilitu pro substituce, maji muj hluboky obdiv.
A jeste jedna otazka nakonec - zkousel jsem jeste jednu fintu, a to
konce radku nesmazat, ale vymenit za nejaky retezec (napr. neco jako
###newline###), ktery na konci zase vymenim za \n a vysledny xml soubor
bude hezky citelny, jako na zacatku. Jen jsem narazil na to, ze v te
substituci nemuzu nahrazovat za \n, ale musi tam byt opravdu escapovane
zalomeni radku. opravdu to nejde obejt nejakym znakem, abych ten prikaz
dostal na jednu radku?
--
Zbyněk Burget
Nádražní 224
798 26 Nezamyslice
tel: 588 580 000, 739 930 931
IČ: 606 88 220
DIČ: CZ7210184674
--
FreeBSD mailing list ([email protected])
http://www.freebsd.cz/listserv/listinfo/users-l