Chcę, aby dane (linia, miejsce docelowe, czas i pozycja) były wyświetlane w tym miejscu rozkład metra strona.
Kod, który napisałem na razie to:
#!/bin/bash
curl "http://mon.ruter.no/SisMonitor/Refresh?stopid=3010370&computerid=acba4167-b79f-4f8f-98a6-55340b1cddb3&isOnLeftSide=true&blocks=&rows=6&test=&stopPoint=">ruter.html
awk -F "</*td>|</*tr>" "/</*t[rd]>.*[A-Z][0-9]/ {print $3, $5, $8, $10 }" ruter.html
Odpowiedzi:
3 dla odpowiedzi № 1Z links
:
links -dump "http://mon.ruter.no/SisMonitor/Refresh?stopid=3010370&computerid=acba4167-b79f-4f8f-98a6-55340b1cddb3&isOnLeftSide=true&blocks=&rows=6&test=&stopPoint="
Wydajność:
Linje Destinasjon TidPoz Linia Czas docelowy Poz 4 Vestli via Storo 3 min 2 5 Vestli via Majorstuen 3 min 1 5 Ringen via Majorstuen 5 min 1 5 Sognsvann 11 min 2 4 Bergkrystallen przez Majorstuen 12 min 1 5 Ringen przez Storo 13 min 2
3 dla odpowiedzi № 2
W ogóle nie używaj do tego wyrażeń regularnych. Konwertuj z HTML na XML i używaj XPath - języka zapytań, który działa z semantyką dokumentów, w przeciwieństwie do zwykłego dopasowywania tekstu:
url="http://mon.ruter.no/SisMonitor/Refresh?stopid=3010370&computerid=acba4167-b79f-4f8f-98a6-55340b1cddb3&isOnLeftSide=true&blocks=&rows=6&test=&stopPoint="
curl "$url" |
tidy -asxml -n -c -b -q --show-warnings no |
xmlstarlet sel -N h=http://www.w3.org/1999/xhtml
-t -m "//h:tr[h:td]"
-v ./h:td[1] -o $"t"
-v ./h:td[2] -o $"t"
-v ./h:td[4] -o $"t"
-v ./h:td[5] -n |
column -s $"t" -t
Dla danego wejściowego kodu HTML na dzień dzisiejszy dane wyjściowe są następujące:
5 Vestli via Majorstuen nå 1
4 Vestli via Storo 2 min 2
5 Ringen via Majorstuen 4 min 1
5 Sognsvann 7 min 2
4 Bergkrystallen via Majorstuen 10 min 1
5 Ringen via Storo 12 min 2
Użyte tutaj narzędzia to:
- HTML Tidy (do konwersji niechlujnego HTML do zgodnego XHTML)
- XMLStarlet (do wykonywania zapytań XPath)
- kolumna (do formatowania wyniku w wyrównane kolumny)
Zauważ także, że $"t"
składnia wymaga, aby używana była powłoka naprawdę się buj (nie /bin/sh
).