2017-07-05 6 views
0

(Xubuntu 16.04.2 x86_64) Ich versuche, eine HTML-Datei zu analysieren und Werte davon zu greifen. Ich brauche die extrahiert alle Code zwischen diesemSed Extract zwischen zwei Mustern zuerst passend

<tr style="text-align: center; background:#FFF"> 

und dieses

</td></tr> 

Das Problem ist ich dies durch eine Schleife renne 800 dieser Abschnitte zu greifen, aber das erste Mal, es läuft es findet die erste Zeichenfolge korrekt, aber es verwendet die letzte Übereinstimmung in der Datei anstelle der nächsten Zeichenfolge aus der ersten Zeichenfolge.

Ich gebe jeden Fund in eine Textdatei aus und der erste kombiniert jeden einzelnen Eintrag, der nicht das ist, was ich brauche, ich brauche individuelle Dateien für jeden Eintrag.

Statt dass kompliziertes Zeichenfolge verwenden, lassen Sie sich sagen, ich habe diese HTML

<div> 
    Index 
    Index 
    Index 
</div> 
<div> 
    Index 
    Index 
    Index 
</div> 
<div> 
    Index 
    Index 
    Index 
</div> 

ich diesen Code verwenden

sed 1,/<div>/,/<\/div>/!d' sourcefile > output 

aber das Kommando mit der gesamten Datei geben, anstatt das erste Spiel der Kommissionierung von </div>.

Ich würde viel lieber sed als awk, grep oder perl, wenn möglich.

+0

* durch eine Schleife 800 dieser Abschnitte zu greifen * - * Ich brauche einzelne Dateien für jeden Eintrag * - so möchten Sie 800 Dateien erhalten? – RomanPerekhrest

+0

Ja, aber ich kann diesen Teil kodieren, das ist vorerst irrelevant. – knuxyl

+0

es ist einfach mit ** Python ** – RomanPerekhrest

Antwort

0

Wenn Sie auf sed bestehen, sollte dies den Trick tun (wenn ich Ihre Frage richtig verstanden habe):

sed -n '/<div>/,/<\/div>/ { /<\/*div>/d; p }' file 

Da POSIX ERE (erweiterte reguläre Ausdrücke) ist immer gierig, den Adressbereich /<div>/,/<\/div>/ wird immer fang konsekutiv div s. Der Befehl, den wir auf diesen Blöcken ausführen, löscht nur die (äußeren) <div> und </div>; Alles andere ausdrucken.

Für die Eingabe file:

a 
<div> 
    1 
</div> 
b 
<div> 
    2 
</div> 
c 
<div> 
    3 
</div> 
d 

Ausgabe lautet:

1 
    2 
    3 
Verwandte Themen