2017-07-05 124 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 
相關問題