2016-04-29 1 views
0

Problem auf passende:Extrahieren von 4 Zeilen aus einer Datei in ein Muster 1. Zeile

Um Daten von 4 Zeilen zu extrahieren (einschließlich der Linie des Musterübereinstimmung) aus einer Datei, wenn ein Muster übereinstimmt.

Beispiel

<div class="class1"> 
 
<img class="class2" src="somelink" alt="xyz"> 
 
<div class="class3" title="some data to be extracted"> 
 
<div class="class4" style="width: 72%;"></div> 
 
</div> 
 
<div class="class1"> 
 
<img class="class2" src="somelink2" alt="xyz2"> 
 
<div class="class3" title="some data to be extracted 2"> 
 
<div class="class4" style="width: 72%;"></div> 
 
</div>

Matching Muster -> class1

muss Daten extrahiert werden:

<div class="class1"> 
 
    <img class="class2" src="somelink" alt="xyz"> 
 
    <div class="class3" title="some data to be extracted"> 
 
    <div class="rating-wrap" style="width: 72%;"></div> 
 
    </div>

Lösungen ich habe versucht:

grep class1 xyz.html 

Aber dies wird nur einzelne Linie bekommen.

+1

versuchen Sie 'grep -A4 -m1 class1 xyz.html', und diese Frage sollte ein Duplikat sein. – blackSmith

+0

funktioniert nicht. Gerade versucht. –

+0

funktioniert für mich! Ich habe den Kommentar bearbeitet, versuche es jetzt. – blackSmith

Antwort

2
grep -A4 class1 xyz.html 

Dies wird die gleiche

<div class="class1"> 
<img class="class2" src="somelink" alt="xyz"> 
<div class="class3" title="some data to be extracted"> 
<div class="rating-wrap" style="width: 72%;"></div> 
0

Es ist schade, holen Sie nicht zwei verschiedene Blöcke in Ihrer Eingabe erstellt haben, so dass Sie die Ergebnisse der Abstimmung von „Class1“ ein für den Erfolg sehen konnte, aber nicht der andere. Wie dem auch sei, wollen Sie das wirklich:

$ awk 'BEGIN{RS=ORS="\n</div>\n"} /class1/' file 
<div class="class1"> 
<img class="class2" src="somelink" alt="xyz"> 
<div class="class3" title="some data to be extracted"> 
<div class="class4" style="width: 72%;"></div> 
</div> 
<div class="class1"> 
<img class="class2" src="somelink2" alt="xyz2"> 
<div class="class3" title="some data to be extracted 2"> 
<div class="class4" style="width: 72%;"></div> 
</div> 

, weil sie den Block gedruckt wird, dass der passende String erscheint in unabhängig davon, wo in den Block passt es, zum Beispiel:

$ awk 'BEGIN{RS=ORS="\n</div>\n"} /extracted 2/' file 
<div class="class1"> 
<img class="class2" src="somelink2" alt="xyz2"> 
<div class="class3" title="some data to be extracted 2"> 
<div class="class4" style="width: 72%;"></div> 
</div> 

und es kann leicht gezwickt werden Um nur nach einer Übereinstimmung in einem bestimmten Feld zu suchen, wird beispielsweise bei einer Suche nach Klasse1 nur das Feld class = und nicht das Feld title = oder ein anderes Feld in der Zeile gesucht.

Das obige verwendet GNU awk für RS mit mehreren Zeichen.

Verwandte Themen