2016-10-23 1 views
-2

ich gerade gelernt, wie Daten mit bash wie dies von HTML-Skript zu extrahieren:Regex für awk in mehrzeiligen html Skript

<td>hello</td> <td>whatsup</td>

kann ich awk -F '[<>]' '/<td>/,/<\/td>/ {print $3}' test.html

Allerdings verwenden wie ich darüber gehen, Wenn es mit Zeilenumbrüchen wie diesem getrennt ist?

<td> hello </td> <td> whatsup </td>

durch Tutorien gehen die besten Code, den ich tun konnte, ist das, was nicht zu funktionieren scheint.

awk -F '\n' '/<td>/,/<\/td>/ {print $2}' test.html

+0

Ich schlage vor, einen XML/HTML-Parser zu verwenden (xmllint, xmlstarlet ...). – Cyrus

+0

Ich versuche zu lernen, HTML selbst zu analysieren, ohne irgendwelche Parser zu verwenden. –

+0

Siehe: [Verwenden Sie Regex nicht, um HTML zu analysieren] (http://stackoverflow.com/a/1732454/4060711) – Cyrus

Antwort

1

Sie haben gelernt, falsch :-). Verwenden Sie niemals Bereichsausdrücke (/start/,/end/), da sie triviale Jobs etwas kürzer machen, aber dann eine vollständige Neuschreibung oder duplizierte Bedingungen für alles benötigen, was auch nur entfernt interessant ist. Verwenden Sie stattdessen immer eine Flagge (/start/{f=1} f; /end/{f=0}).

In diesem Fall ist nichts davon relevant, weil die richtige Art und Weise zu tun, was Sie wollen, ist mit einem XML-Parser und wenn Sie das aus irgendeinem Grund nicht tun können, dann tun Sie dies mit GNU awk für multi-char RS:

awk -v RS='\\s*</td>' 'sub(/.*<td>\s*/,"")' file 
hello 
whatsup 
Verwandte Themen