Forum: PC-Programmierung Regex, mit sed html-Datei zerlegen, ganz kurze Anfängerfrage


von Ich (Gast)


Lesenswert?

Hallo,

aus einer html-Datei will ich mittels sed das ausgeben, was zwischen 
<title> und </title> steht. Soweit bin ich schon:
1
sed -n 's/.*<title>\([^<]*\).*/\1/p' temp.html

liefert mir den Inhalt des letzten title-Tags, weil das erste .* ja 
"gierig" möglichst viel mitnimmt.

Wie bekomme ich den Inhalt des zweiten, dritten, etc. title-Tags?

von Ich (Gast)


Lesenswert?

Problem gelöst:
http://alleightllc.wordpress.com/2007/12/13/extracting-htmlxml-tag-text-data-using-sed/

----------------------------------------------------------v
cat temp.html | sed -e 's/<\/title>/<\/title>\n/g' | sed '3q;d' | sed -n 
-e 's/.*<title>\(.*\)<\/title>.*/\1/p'

gibt den Inhalt des 3. <title>-Tags aus.

Eine elegantere Lösung wäre mir dennoch lieber, kann mir jemand helfen?

von Daniel F. (df311)


Lesenswert?

Ich schrieb:
> gibt den Inhalt des 3. <title>-Tags aus.

in dem fall solltest du das html in die tonne treten. es ist nämlich 
maximal 1 title-tag pro html-datei erlaubt (und das muss im head-bereich 
stehen)

von Ich (Gast)


Lesenswert?

Ich korrigiere mich:

Es ist kein HTML, sondern ein XML im Atom-Feed-Format als Ergebnis einer 
Youtube-Suchanfrage.
(Hoffentlich stimmt das so, ich weiß nämlich überhaupt nicht, wovon ich 
rede.)

von Tom K. (ez81)


Lesenswert?

HTML/XML mit Regexen parsen funktioniert nicht wirklich gut. Wo sed ist, 
ist meist auch Python vorhanden. Und fertige Lösungen zum RSS parsen 
sollte es dafür reichlich geben. Mit bash+sed geht viel, aber irgendwann 
wird es unhandlich und unlesbar.

EDIT:
Beispiel (damit der Beitrag konstruktiv wird ;) ) mit feedparser
1
import feedparser
2
d = feedparser.parse('http://www.mikrocontroller.net/newsfeed')
3
# oder lokal mit
4
# d = feedparser.parse('blablubb.xml')
5
for e in d.entries:
6
    print e.title

http://pypi.python.org/pypi/feedparser/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.