2011-09-29 71 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. 

$