BASH + regulární výrazy – OS - GNU / Linux – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

BASH + regulární výrazy – OS - GNU / Linux – Fórum – Programujte.comBASH + regulární výrazy – OS - GNU / Linux – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Roman
~ Anonymní uživatel
113 příspěvků
13. 3. 2009   #1
-
0
-

Dobrý den,
Předem se omlouvám za offtopic, ale nenašel jsem jiné vhodné téma pro tento příspěvek.
Potřeboval bych poradit ohledně tvorby regulárního výrazu. Na vstupu mám následující obsah:

nejaky text nejaky text

<li>polozka seznamu</li>
<li>polozka seznamu</li>
nejaky text nejaky text
nejaky text nejaky text
<li>polozka seznamu</li>
<li>polozka seznamu</li>
<li>polozka seznamu</li>
nejaky text nejaky text

A potřeboval bych pomocí SEDu (awk) a regulárního výrazu docílit tohoto:
nejaky text nejaky text

<ul>
<li>polozka seznamu</li>
<li>polozka seznamu</li>
</ul>
nejaky text nejaky text
nejaky text nejaky text
<ul>
<li>polozka seznamu</li>
<li>polozka seznamu</li>
<li>polozka seznamu</li>
</ul>
nejaky text nejaky text

Prostě potrebuji, aby do textu byly doplněny tagy <ul> a </ul> na správná místa.

Předem mnohokrát děkuji za rady či nějaké nápady.

S pozdravem Roman ;-)

Nahlásit jako SPAM
IP: 77.48.59.–
Reklama
Reklama
tmi0
Věrný člen
14. 3. 2009   #2
-
0
-

hmm tak na tohle nevim jestli sed staci, nebot ten umi appendovat za radek ktery matchuje nejaky pattern - coz je ovsem tady malo, ty ale potrebujes operovat vzdy s dvema po sobe jdoucimi radky, tak ze jeden obsahuje <li> a druhy ano, popr. naopak. pokud ma sed nejakou moznost jak pracovat s vice radky naraz, tak o ni nevim... s awkem neumim, ale myslim ze je podobne omezen na jednoradkove akce... mozna by se to dalo nejakym zpusobem resit vetsi spolupraci s bashem, ze by jsi nasel prvni vyskyt tagu <li>, pred nej vlozil <ul>, zbytek mazal... ale nedokazu si to moc predstavit, radeji bych na to vzal nejake vetsi kladivo typu python/perl ...

Nahlásit jako SPAM
IP: 213.226.226.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
14. 3. 2009   #3
-
0
-

Implementace je ze zadání omezena čistě na BASH. Myslím, že awk by se s tím nějakým způsobem umělo poprat. Akorát nemůžu přijít na tu správnou myšlenku :-(

Nahlásit jako SPAM
IP: 77.48.59.–
bukaj_0010
Věrný člen
14. 3. 2009   #4
-
0
-

Roman (Anonymní uživatel?)
Na vstupu mám následující obsah … A potřeboval bych pomocí SEDu (awk) a regulárního výrazu docílit tohoto …

$ awk 'BEGIN { 

list_open = 0;
}

/<li>/ {
if (list_open == 0) {
list_open = 1;
print "<ul>";
}
print $0;
}

!/<li>/ {
if (list_open == 1) {
list_open = 0;
print "</ul>";
}
print $0;
}' vstupni_soubor


Myslím, že awk by se s tím nějakým způsobem umělo poprat. Akorát nemůžu přijít na tu správnou myšlenku
Princip: pokud narazím na řádek, který obsahuje <li> a není otevřený seznam, tak ho otevřu; pokud narazím na řádek, který <li> neobsahuje a je otevřený seznam, tak ho zavřu. Je to naprosto blbé a nedokáže se to vyrovnat například s tím, že by obsah <li> byl přes více řádků (ale i to by se snad dalo dořešit v awk).

Ale aby to bylo blbuvzdorné, tak by to chtělo něco „víc“ – asi Perl, Python, jak píše tmi.

Implementace je ze zadání omezena čistě na BASH.
V tom případě by se ani nemělo používat awk/sed, protože jsou to v postatě samostatné jazyky :o) A jelikož můžeš používat awk/sed, tak proč by nešlo něco na způsob:
$ perl <<EOF


EOF

:o)

Nahlásit jako SPAM
IP: 88.101.128.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
Roman
~ Anonymní uživatel
113 příspěvků
14. 3. 2009   #5
-
0
-

To bukaj_001 : Mockrát diky za vyřešení problému :-) Hodně mi to pomohlo. :smile2:

Nahlásit jako SPAM
IP: 80.251.248.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

Podobná vlákna

Regulární výrazy — založil polonium

Regulární výrazy — založil Sony

Regulární výrazy — založil Nikishek

Regulární výrazy — založil Míša

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý