在匹配第一行中的模式时从文件中提取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
但是,这将只能得到单行。
答
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。
试试'grep -A4 -m1 class1 xyz.html',这个问题应该是重复的。 – blackSmith
无法正常工作。刚试过。 –
适合我!我编辑了评论,现在就试试。 – blackSmith