2012-11-29, 14:24
  #1
Medlem
FlyingMachines avatar
Jag har en fil innehållandes ett antal rader. På dessa raderna förekommer det ett antal strängar som jag vill snappa upp.

Ex:
Kod:
<a href="fyförsatan">hej</a><a href="fyfan">hej</a><a href="järnspikar">hej</a><a href="mög">hej</a><a href="fisk">hej</a>

Jag behöver extrahera allt som står mellan <a href=" och ">, och då antagligen med hjälp av reguljära uttryck. Vilket program är det som gäller? Jag lyckas bara få grep att skriva ut hela raden, och inte bara den delen som jag är intresserad av. Gör jag fel på något sätt, eller är inte grep rätt verktyg?
Citera
2012-11-29, 14:42
  #2
Medlem
Ohrwurms avatar
Citat:
Ursprungligen postat av FlyingMachine
Jag har en fil innehållandes ett antal rader. På dessa raderna förekommer det ett antal strängar som jag vill snappa upp.

Ex:
Kod:
<a href="fyförsatan">hej</a><a href="fyfan">hej</a><a href="järnspikar">hej</a><a href="mög">hej</a><a href="fisk">hej</a>

Jag behöver extrahera allt som står mellan <a href=" och ">, och då antagligen med hjälp av reguljära uttryck. Vilket program är det som gäller? Jag lyckas bara få grep att skriva ut hela raden, och inte bara den delen som jag är intresserad av. Gör jag fel på något sätt, eller är inte grep rätt verktyg?

Det enda jag kommer att tänka på är filen.fil | grep "href".
Då skriver den ju ut allt som har med href att göra men du får ju massa skräp med också :/
Citera
2012-11-29, 14:48
  #3
Medlem
3arlTurn3rs avatar
Citat:
Ursprungligen postat av FlyingMachine
Jag har en fil innehållandes ett antal rader. På dessa raderna förekommer det ett antal strängar som jag vill snappa upp.

Ex:
Kod:
<a href="fyförsatan">hej</a><a href="fyfan">hej</a><a href="järnspikar">hej</a><a href="mög">hej</a><a href="fisk">hej</a>

Jag behöver extrahera allt som står mellan <a href=" och ">, och då antagligen med hjälp av reguljära uttryck. Vilket program är det som gäller? Jag lyckas bara få grep att skriva ut hela raden, och inte bara den delen som jag är intresserad av. Gör jag fel på något sätt, eller är inte grep rätt verktyg?
T.ex. med "sed":
Kod:
$ echo '<a href="och">' | sed 's/<a href="\([A-Za-z]*\)">/\1/'
Vilket skriver ut "och". Du behöver sedan t.ex. infoga radbrytning eller liknande så att du får en matchnig per rad. Många sätt är bra, utom de dåliga..
Citera
2012-11-29, 15:01
  #4
Medlem
Passifloras avatar
http://www.focalmedia.net/urlextract.html
Citera
2012-11-30, 03:37
  #5
Moderator
vhes avatar
Det är en dålig ide att parsa HTML med regex. Det är bättre att använda en riktig html-parser.

Följande lilla pythonscript gör jobbet. Kräver att du har lxml (paketnamn python-lxml åtminstone i .deb-baserade distar) installerat. Läser från stdin.

Kod:
#!/usr/bin/env python
from lxml.html import parse
import sys

for element in parse(sys.stdin).xpath('//*/@href'):
    print element

Kan destilleras ner till följande obegripliga one-liner, om du ogillar script:
Kod:
python -c 'import sys,lxml.html;print "\n".join(lxml.html.parse(sys.stdin).xpath("//*/@href"))'
Citera
2012-12-01, 00:37
  #6
Medlem
FlyingMachines avatar
Citat:
Ursprungligen postat av vhe
Det är en dålig ide att parsa HTML med regex. Det är bättre att använda en riktig html-parser.

Följande lilla pythonscript gör jobbet. Kräver att du har lxml (paketnamn python-lxml åtminstone i .deb-baserade distar) installerat. Läser från stdin.

Kod:
#!/usr/bin/env python
from lxml.html import parse
import sys

for element in parse(sys.stdin).xpath('//*/@href'):
    print element

Kan destilleras ner till följande obegripliga one-liner, om du ogillar script:
Kod:
python -c 'import sys,lxml.html;print "\n".join(lxml.html.parse(sys.stdin).xpath("//*/@href"))'
Aha, så jag var alltså helt ute och cyklade. Jag är dock mer bekväm med PHP, så efter lite letande hittade jag denna parsen:
http://simplehtmldom.sourceforge.net/

Tack för infon!
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in