2010-05-03 38 views
0

需要一個解決方案來從多個HTML文件中刪除像和<div class="nav"></div>這樣的節點。從shell中刪除HTML節點

我想轉儲一個站點到磁盤沒有菜單和頁腳,什麼不是。理想情況下,我會使用像sed這樣的基本的unix工具來完成這項任務。由於它不是XML我不能使用xmlstarlet

任何人都可以請建議食譜,所以我可以理想地有一個腳本運行kill-node.sh 'div class="toplinks"' *.html修剪我不想要的位。謝謝

+1

HTML與正則表達式會觸發一些腸道反應,因此您可能想要提供更多信息。這是跨越大量文件的長期解決方案,還是跨越有限文件集的一次性交易?目標節點在各個文件中的格式化方式是否有很多不同?還是它們是相同的?如果它們是相同的,你可以更具體地瞭解它們在文件中的佈局方式嗎?我們是否可以首先用[X] HTML標準化程序修改整個文件,還是我們嚴格限制爲刪除目標節點? – 2010-05-03 11:35:54

+0

oneshot。 幾乎相同。我希望我知道如何從* .html中刪除相同的30行文本塊。 :) [X] HTML規範化程序...你的意思是'tidy'?我不喜歡整潔,因爲它不會做HTML5,它至少需要半小時的開關瘋狂才能讓它輸出一些理智的東西。 – hendry 2010-05-03 11:49:59

回答

0

只是爲了推動你的正則表達式的仇敵堅果,試試這個關於大小:

sed ':a;$!N;$!ba;s/B/-B/g;s/A/BB/g;s/<\/foo>/A/g;:b;s/<foo>[^A]*A//;tb;s/BB/A/g;s/-B/B/g' foo.html

隨着foo.html之中:

<header> 
keep me 
<foo>gtg</foo> 
</header> 
<foo> 
delete me</foo> 
<foo>gtg</foo> 
<foo>gtg</foo> 

否則有人可以做一個CMDLINE HTML5 parser請。謝謝。 x

2

sed基於正則表達式。使用正則表達式解析html是一個在SO上重複出現的主題,請參閱例如regular expression to extract text from HTML或更好的Can you provide some examples of why it is hard to parse XML and HTML with a regex?。也就是說,如果html頁面是以類似的方式編寫的,你仍然可以構建一個能夠完成這個工作的正則表達式,但是要做好準備,以便構建一個完整的解決方案是不可能的(在理論上可以證明是不可能的)在所有情況下使用正則表達式工作。

+0

在我的情況下,匹配開始和結束標籤應該很簡單。 儘管如此,如果你可以建議一個更好的命令行工具,我全是耳朵! – hendry 2010-05-03 11:22:27

+0

@hendry

不能抱,爲時已晚! http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – 2010-05-03 11:41:18