Nalezení dat v HTML pomocí sed

Lukáš Holeček

Nalezení dat v HTML pomocí sed
« kdy: 08. 11. 2013, 20:06:07 »
zdravim,
mam problem se sedem. Potrebuji extrahovat data z html souboru a zapsat ho do jineho. Problem je ze mi script vzdy vypise prvni nalezeny na radku od zadu a pak preskoci na dalsi radek.

Kód: [Vybrat]
sed -n s/.*\(1_big.*.jpg\).*/\1/p "a.html" > "obrazky.html"
Prosim o pomoc a radu.
Dekuji za pomoc.

« Poslední změna: 11. 11. 2013, 10:00:03 od Petr Krčmář »


mareolan

Re:Script sed
« Odpověď #1 kdy: 08. 11. 2013, 20:27:34 »
Vhodnejsi mi na tohle prijde pouzit grep s prepinacem -o (vypisuje pouze namatchovanou cast). Pokud je na radku vice obrazku, tak vypise kazdy z nich.
Kód: [Vybrat]
grep -Poi '[a-z0-9_\-]+\.jpg'

Lukáš Holeček

Re:Script sed
« Odpověď #2 kdy: 08. 11. 2013, 21:29:34 »
Super, presedlam tedy na grep. Nicmene bych potreboval aby to vypsalo text mezi 1_big a .jpg
Snazim se ho momentalne optimalizovat, ale nedari se.

mareolan

Re:Script sed
« Odpověď #3 kdy: 08. 11. 2013, 21:46:48 »
Tak to lze udelat takhle (pokud znate look-ahead, look-behind a lazy kvantifikator v regexpech):
Kód: [Vybrat]
grep -Po '(?<=1_big).*?(?=\.jpg)'
Pokud neznate, tak to muze byt srozumitelnejsi bez look-ahead a look-behind:
Kód: [Vybrat]
grep -Po '1_big.*?\.jpg' a.html | sed 's/^.....\(.*\)....$/\1/'
Pro reg. vyrazy doporucuju obetovat nekolik hodin casu a prostudovat stranku http://www.regular-expressions.info/tutorialcnt.html.

e

Re:Script sed
« Odpověď #4 kdy: 08. 11. 2013, 21:51:40 »
mam pocit, ze HTML se neda genericky parsovat regularnimi vyrazy, ale toto nemam ze sve hlavy. Me sed/grep vzdy stacil..


Lukáš Holeček

Re:Script sed
« Odpověď #5 kdy: 08. 11. 2013, 22:21:48 »
Velice Vam dekuji za pomoc, moc jste mi pomohli.
Behem vikendu se vrhnu na reg. vyrazy, at v tom mam jasno.
Jeste napisu jak jsem dopadl, zatim to vypada ze vse funguje.
Jeste jednou diky.