2011-09-29 101 views
10

我試圖從wepage中提取表格的內容。我只是需要的內容,但不是標籤<tr></tr>。我甚至不需要「tr」或「td」只是內容。對於如:刪除sed或類似文件中的html標籤

<td> I want only this </td> 
<tr> and also this </tr> 
<TABLE> only texts/numbers in between tags and not the tags. </TABLE> 

我也希望把第一列輸出這樣一個新的CSV文件 COLUMN1,INFO1,INFO2,INFO3 coumn2,INFO1,INFO2,INFO3

我試圖用sed刪除模式<tr><td>但是當我獲取表格還有其他標籤,如<color><span>等,所以我想要的是刪除所有的標籤;總之一切都與<和>。

+1

內容有規律嗎?您可以使用['lynx'](http://lynx.browser.org/)來抓取頁面並將其轉換爲文本,然後解析純文本。很難說沒有更多的細節,屏幕抓取往往是各種醜陋的黑客之間的選擇。 –

+0

好的,這解決了第一個問題** sed -e's/<.*> // g'input **。上面的評論我忘記了頁面,只刮掉了表格部分。所以文件只包含乾淨的表格標籤和數據。像考試時間表例程。 – user913492

回答

17

sed 's/<[^>]\+>//g'將刪除所有標籤,但您可能希望用空格替換它們,以便彼此相鄰的標籤不會一起運行:<td>one</td><td>two</td>變爲:onetwo。所以你可以做sed 's/<[^>]\+>/ /g'所以它會輸出one two(呃,實際上是one two)。

這就是說,除非你只需要原始文本,而且聽起來好像你正在試圖在剝離標籤之後對數據進行一些轉換,像Perl這樣的腳本語言可能是一個更合適的工具。

由於mu太短提到抓取HTML可能有點冒險,使用真正爲你解析HTML的東西是最好的方法。 PHPs DOM API對於這些東西是非常好的。

+0

謝謝..這是有益的.. .. – user913492

2

原始碼:

Mac終端REGEX的行爲有點不同。

$ curl google.com | sed 's/<[^>]*>//g' 
% Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 219 100 219 0  0 385  0 --:--:-- --:--:-- --:--:-- 385 

301 Moved 
301 Moved 
The document has moved 
here. 

$ bash --version 
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14) 
Copyright (C) 2007 Free Software Foundation, Inc. 

編輯:

只是爲了澄清起見,原始模樣:

$ curl googl.com 
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> 
<TITLE>301 Moved</TITLE></HEAD><BODY> 
<H1>301 Moved</H1> 
The document has moved 
<A HREF="http://www.google.com/">here</A>. 
</BODY></HTML> 

而且煩人的捲曲頭可我用下面的例子是能夠做到這一點在我的Mac擺脫使用-s選項:

$ curl -s google.com | sed 's/<[^>]*>//g' 

301 Moved 
301 Moved 
The document has moved 
here. 

$