Portál AbcLinuxu, 10. května 2025 08:08

Dotaz: sed: interpretace *

25.11.2003 22:13 Vlastimil Ott | skóre: 66 | blog: Plastique | Opava
sed: interpretace *
Přečteno: 381×
Odpovědět | Admin
Ahojte, chci odstranit html tagy a mimojiné používám tento průchod, který má odstranit parametry tagu p a dosadit za ně pouze <p>:

sed -e s/\<p*\>/\<p\>/ t1.tmp > pokus.html

To všem nefunguje na již existující <p>, spolkne to vše do dalšího znaku >. Ptám se: Proč? a Jak substituovat mezeru? Hledal jsem, ale jistě uznáte, že to jde špatně, nechci obecná pravidla pro vytváření regexp, ale konkrétní verzi pro sed, která je někdy odlišná od standardu. Díky. GNU sed version 4.0.7

--vo
Práce: Liberix, o.p.s. | Blog: OpensourceBlog.cz | Online kurz Zlatý WordPress
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

25.11.2003 23:42 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše sed: interpretace *
Odpovědět | | Sbalit | Link | Blokovat | Admin
zkusil bych sed -e "s/<p[^>]*>/<p>/" soubor.html
-- Nezdar není hanbou, hanbou je strach z pokusu.
25.11.2003 23:52 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše sed: interpretace *
Tohle jsem chtěl původně napsat také, ale bacha, matchne se i <pre>, <param>
25.11.2003 23:48 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše sed: interpretace *
Odpovědět | | Sbalit | Link | Blokovat | Admin
No, tohle musí dělat hrozné věci, zejména když se ti náhodou expanduje ta hvězdička už v shellu :o) Nicméně k otázce: hvězdička je ,greedy`, tj. spolyká nejvíc, co může. Navíc ji máš za p, takže polyká písmenka p (nejsme v shellu, když chci libovolný znak, musím napsat tečku, nestačí ,nic`). Napsal bych to asi takto (základní obrat s [^něco]):
sed 's/<p [^>]*>/<p>/g'
Řekl bych, že je to obecné pravidlo -- u když všechny Perly, Pythony a Vimy už dnes mají nějaké non-greedy verze, takže by se to psalo např.
s/<p .*?>/<p>/g
egg avatar 26.11.2003 00:04 egg | skóre: 20 | Praha
Rozbalit Rozbalit vše sed: interpretace *
Otaznik je tam navic, ne? Krom toho muj sed 3.02 chape otaznik jen jako znak otaznik.
26.11.2003 00:06 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše sed: interpretace *
Kdyby sis to přečetl pořádně, nepochybně by sis všiml, že ten druhý výraz se už netýká sedu ;-)
egg avatar 26.11.2003 00:26 egg | skóre: 20 | Praha
Rozbalit Rozbalit vše sed: interpretace *
OIC. :-) Sorry. Ale kdyz uz jsme u toho - da se v sedu nejak napsat opakovani 0 nebo 1 krat?
26.11.2003 00:48 qwerty | skóre: 9
Rozbalit Rozbalit vše sed: interpretace *
v sedu je: \+ = 1 a vice; \? = zadny nebo 1
26.11.2003 09:25 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše sed: interpretace *
Nikoli v sedu, ale v základních (basic) regulárních výrazech. Kdysi uměl sed jen ty, ale GNU sed umí už i rozšířené, kde + je jeden a více, ? je 0 nebo 1 -- a také {2,4} je dva až čtyři, namísto \{2,4\}.
26.11.2003 11:23 qwerty | skóre: 9
Rozbalit Rozbalit vše sed: interpretace *
jo jenomze to tomu sedu musis nastavit parametrem. Defaultne puziva GNU sed tamty teda aspon ten muj (4.0.7) ted sem to zkousel. Takze echo xwww | sed -n 's/w\+/X/p' vrati xX a je to spravne teda s tema spetnyma lomitkama jinak ti to bude hledat + jako znak. Na ty rozsirene se to prepne pridanim -r.
26.11.2003 13:09 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše sed: interpretace *
OK, mně jen přišlo ,v sedu` jako poněkud nepřesné, když je to vlastnost typu regulárních výrazů, nikoli inherentní vlastnost programu...
26.11.2003 17:15 Vlastimil Ott | skóre: 66 | blog: Plastique | Opava
Rozbalit Rozbalit vše sed: interpretace *
Díky. Doufal jsem sice, že budeš s odpovědí rychlejší, chtěl jsem tu otázku napsat pouze tobě (2Yeti: sed: interpretace *) ;-), ale to je jenom tak ze srandy. ;-) Není mi jasný význam znaků ^ a $: četl jsem spoustu manuálků k regexp, ale odrazují mě 'dialekty' jednotlivých programů. Píše se ovšem, že tyto znaky uvozují řádek. Co to je? Posloupnost ukončená CarriageReturn? Myslel jsem, a vaše řešení to (snad?) potvrzují, že se jedná o začátek řádku/konec vzorku, což by se mi líbilo víc. Příklad, který uvádíš, jsem zhruba měl, ale sed mi nebral mezeru (neukončený příkaz 's' byla zhruba hláška). Upgradoval jsem sed na 4.0.7, tvůj příklad funguje, tak jsem si vytiskl manuál sedu (z gnu.org). Až mi vylezl, tak jsem zjistil, že je pět let starý. :-/ :-( Je toto možné? Parametr -r je tam popisovaný jako vstup externího souboru...pak má člověk klást normální dotazy... (pomíjím taky, že nechápu, jak to že za příkazem 's' následuje ještě 'g'; asi nová syntaxe, co). (A ty mně určitě napíšeš, že je nová už čtyři roky...:-D :-D) Logicky následuje další dotaz: Kde se nachází aktuální verze manuálu sedu, když na gnu.cz a gnu.org není vůbec či je těžce zastaralý? (Man mám, chci manuál.;-) ) Díky, --vo
Práce: Liberix, o.p.s. | Blog: OpensourceBlog.cz | Online kurz Zlatý WordPress
26.11.2003 17:26 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše sed: interpretace *
zkousel jsi odkazy uvedene v sekci "Other resources" info stranek sedu?
26.11.2003 17:37 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše sed: interpretace *
Mno, nechceš si přečíst něco o regulárních výrazech? BTW info stránky sedu 4.x obsahují popis nových featur, takže určitě nejsou pět let staré, a vygenerovat a vytisknout si aktuální manuál z texinfa by neměl být takový problém. Můj regulární výraz osahuje ^ jako negaci znakové třídy (character class), takže asi tak ;-) Jinak a konec začátek řádku a vzorku se v 95% případů shodují, a v těch ostatních je lepší konzultovat dokumentaci příslušného programu (např. v Perlu je možné mezi těmi významy přepínat optionem s). g je option znamenající ,globálně`, tj. všechny výskyty -- RTFM! A je možná starší než ty ;-) Neukončený příkaz jsi dostal asi proto, žes to nedal do apostrofů, takže to sed dostal jako dva argumenty (výraz je defaultně jen první argument, druhý je už jméno souboru) -- RTFM bash(1)!!! To je snad nějaká provokace ... jsi to opravdu ty?
26.11.2003 17:57 Vlastimil Ott | skóre: 66 | blog: Plastique | Opava
Rozbalit Rozbalit vše sed: interpretace *
Jo, jsem to já. Jestli je to provokace, nevím. Z předchozího to nevyplynulo tak, jak jsem chtěl: já samozřejmě všechny ty parametry/příkazy znám, neuvědomil jsem si pravda ty uvozovky, :-/ protože nemám s regulárními výrazy trénink. Chtěl jsem jenom nastínit, že dokumentace mi připadá naprosto troskoidní; kdybych měl aktuální, asi se neptám. Našel jsem tvoji dřívější radu a zkoušel ji dost dlouho, než jsem zjistil, že máš pravděpodobně 'jiný' sed, myšleno o dost novější a že se hodně věcí změnilo. Až jsem stáhl novou verzi, bylo jasno. texinfo není to první, po čem sahám, budu muset změnit návyky. Takžes mi odpověděl, já se kaju, budu si muset hlídat verze, i když nechápu, jak to, že ve Slackwaru 9.1 byl sed 3.0.2.! (A Linux v kostce založím asi hodně hluboko do knihovny...:-/) Vyklízím pole, celý červený....:-D --vo
Práce: Liberix, o.p.s. | Blog: OpensourceBlog.cz | Online kurz Zlatý WordPress
26.11.2003 18:12 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše sed: interpretace *
Ohledně manuálu sedu bych také čekal, že už to někdo vygeneroval za mě, ale má-li něco info stránky, obvykle čtu je, protože je obvykle píšou jen ti, co jim na dokumentaci záleží... Hint při generování dokumentace: cd doc && make dvi.

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.