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

时间:2016-04-29 12:33:58

标签: unix awk grep

问题:

当模式匹配时,从文件中提取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>
&#13;
&#13;
&#13;

匹配模式 - &gt;的Class1

需要提取数据:

&#13;
&#13;
    <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>
&#13;
&#13;
&#13;

我正在尝试的解决方案:

grep class1 xyz.html 

但这只能获得单行。

2 个答案:

答案 0 :(得分:2)

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>

答案 1 :(得分:0)

你输入中没有创建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。