2017-07-05 99 views
0

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

+0

*通过一个循环来抓住这些路段的800 * - *我需要单独的文件为每个条目* - 所以你要获得800个文件? – RomanPerekhrest

+0

是的,但是我可以编码那部分,暂时不相关。 – knuxyl

+0

** Python **很容易 – RomanPerekhrest

回答

0

如果你坚持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 
相关问题