问题:
当模式匹配时,从文件中提取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;
匹配模式 - &gt;的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>
&#13;
我正在尝试的解决方案:
grep class1 xyz.html
但这只能获得单行。
答案 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。