Sed提取两种模式之间的第一个匹配
问题描述:
(Xubuntu 16.04.2 x86_64) 我试图解析一个html文件并从中获取值。我需要这个Sed提取两种模式之间的第一个匹配
<tr style="text-align: center; background:#FFF">
这
</td></tr>
问题之间提取的所有代码,是我通过一个循环中运行该抓住这些部分的800,但它第一次运行时发现第一个字符串正确,但它使用文件中的最后一个匹配,而不是第一个字符串中的下一个匹配。
我将每个查找输出到文本文件中,第一个将每个条目都组合起来,这不是我所需要的,我需要为每个条目输入单独的文件。而不是使用复杂的字符串
,让我们说我有这样的HTML
<div>
Index
Index
Index
</div>
<div>
Index
Index
Index
</div>
<div>
Index
Index
Index
</div>
我使用这个代码
sed 1,/<div>/,/<\/div>/!d' sourcefile > output
但与给整个文件的命令,而不是捡的第一场比赛</div>.
如果可能的话,我宁愿使用sed而不是awk,grep或perl。
答
如果你坚持sed
,这应该做的伎俩(如果我正确地理解你的问题):
sed -n '/<div>/,/<\/div>/ { /<\/*div>/d; p }' file
由于POSIX ERE(扩展的正则表达式)是总是贪婪,地址范围/<div>/,/<\/div>/
总会连续捕获div
s。我们在这些块上运行的命令仅删除(外部)<div>
和</div>
;打印出其他一切。
对于输入file
:
a
<div>
1
</div>
b
<div>
2
</div>
c
<div>
3
</div>
d
输出为:
1
2
3
*通过一个循环来抓住这些路段的800 * - *我需要单独的文件为每个条目* - 所以你要获得800个文件? – RomanPerekhrest
是的,但是我可以编码那部分,暂时不相关。 – knuxyl
** Python **很容易 – RomanPerekhrest