awk Rückkehr Eltern HTML-Tag-Wert, wenn sein Kind Tag-Inhalt angepasst ist - möglich?

StackOverflow https://stackoverflow.com/questions/3783736

  •  05-10-2019
  •  | 
  •  

Frage

Ich habe für Lösung für dieses Problem schon seit geraumer Zeit auf der Suche, aber ich kann es nicht alleine herausfinden.

Also ich habe Reihe von HTML-Code-Blöcke, und ich möchte für bestimmte Zeichenfolge suchen, die in einem der inneren Tags enthalten ist, und wenn es passen, das ich zurückkehren wollen, dass es übergeordnete Tag-Wert. Hier das Beispiel "

<li rel="Returns this value">
    <some other tags and elements here />
    <a class="link"><span>This match</span></a>
</li>

Wir für String This match suchen und es wird Returns this value zurück. Ist das möglich in awk? Wenn nicht, was ist einfachste Weg, dies zu erreichen? Ich habe nichts dagegen keine Lösung, aber awk oder ähnliches Befehlszeilentool würde bevorzugt werden. Ich bin auf Ubuntu Server runing und ich Root-Zugriff haben, so benötigt, wenn ich auf andere Sprachen wie Ruby, Python, Perl, PHP und andere verlassen können.

Bisher habe ich in der Lage gewesen, für String zwischen den span-Tags zu suchen, und seinen Inhalt zurück. Es könnte jedoch viel einfacher, mit einfachen sed-Befehl durchgeführt werden, so gibt es nicht viel Verwendung für sie noch. Allerdings kann es immer noch nützlich sein und verbessert werden kann, zu machen, was ich brauche, es zu tun, so hier geht:

awk 'BEGIN{RS="";FS="</span>"}
/li/{
 for(i=1;i<=NF;i++){
    if($i ~ /span/){
        gsub(/.*span>/,"",$i)
        print $i
    }    
 } 
}'

Wenn auf obiges Beispiel verwendet wird, wird es This match zurück. Vielen Dank für Anregungen.

War es hilfreich?

Lösung

Generell können Sie nicht Parsen html mit regulären Ausdrücken.

Was nicht bedeutet, dass man nicht Parsen html in awk, obwohl es eine große Aufgabe sein würde, und ich habe noch nie von jemand tun es gehört.

Wenn Sie Ihre Ziele klar definiert sind und der Eingang ist ziemlich einheitlich und Sie können bestimmte Dinge über die Verschachtelung von Tags in Eingabe garantieren, könnten Sie in der Lage sein, es zu verwalten.

Doch für den größten Teil ist awk das falsche Werkzeug für den Job. Besser, eine Sprache zu wählen, die eine HTML-Parsing-Engine zur Verfügung und Verwendung hat, dass. Perl, Python, PHP, Ruby ... viel Auswahl.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top