在匹配第一行中的模式时从文件中提取4行

问题描述:

问题:在匹配第一行中的模式时从文件中提取4行

从模式匹配时从文件中提取4行数据(包括模式匹配行)。

<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>

匹配图案 - >的Class1

数据需要提取:

<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>

解决方案我试图:

grep class1 xyz.html 

但是,这将只能得到单行。

+1

试试'grep -A4 -m1 class1 xyz.html',这个问题应该是重复的。 – blackSmith

+0

无法正常工作。刚试过。 –

+0

适合我!我编辑了评论,现在就试试。 – blackSmith

grep -A4 class1 xyz.html 

这将获取相同的

<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> 

这太糟糕了,你没有创建在输入2个不同的块,这样你可以看到的“class1的”匹配的结果成功的人,但而不是其他。无论如何,你真的想这样:

$ 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> 

,因为它会打印出匹配的字符串出现在无论在块它匹配,其中,如块:

$ 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> 

,它可以很容易地调整了只在特定字段中查找匹配项,例如,对class1的搜索只查看class =字段,而不查看title =字段或行中的其他任何地方。

以上使用的GNU awk为多字符RS。