2016-11-25 65 views
-1

我想通过Bash使用sed或awk解析来自网站的数据(随时改变我的方向来处理数据)。通过Bash解析表中的数据或数据

下面是一段代码示例。

<tbody> 
     <tr> 
      <td class="text-left">111</td><td class="text-center"> 
       <a href="/path1.htm">AAA</a> 
      </td><td class="text-center"> 
       <a href="/path2.htm" class="tp-link-policy">BBB</a> 
      </td><td class="text-center"> 
       Updated October, 2016 
      </td> 
     </tr><tr> 
      <td class="text-left">CCC</td><td class="text-center"> 
       <a href="/path3.htm"> 
      . 
      . 
      . 
      . 
     </tr> 
</tbody> 

通常当我在PHP中使用的preg_match我有换行符没有问题,但在击我需要彻底改变我的正则表达式的想法。你是否建议首先准备数据以供sed和awk读取,以删除所有换行符,并根据我希望使用sed或awk的数据结构以不同的方式重新创建它们?

例如,我会为每个<tr>创建一个换行符,所以结果如下所示?我是对的还是我应该离开这种想法?这会起作用,但我不喜欢操纵这样的数据。

<tbody> 
<tr><td class="text-left">111</td><td class="text-center"><a href="/path1.htm">AAA</a></td><td class="text-center"><a href="/path2.htm" class="tp-link-policy">BBB</a></td><td class="text-center">Updated October, 2016</td></tr> 
<tr><td class="text-left">CCC</td><td class="text-center"><a href="/path3.htm">....</tr></tbody> 

输出应该是,例如:

111|AAA|BBB|Updated October, 2016 
+1

您的预期产出是多少? – Inian

+3

如果您想对HTML做任何有用的操作,请不要使用基于行的文本处理工具,例如awk和sed。 –

+0

对于命令行HTML解析,您可以查看“html2”(来自“xml2”包)或“hxpipe”及相关函数(来自“html-xml-utils”包)。他们都大致做你想做的事情。 –

回答

0

我用xmllint毕竟。

xmllint --html --shell <file> 

然后我执行这个命令来检索一个需要的xpath。

grep <text> 

当您在html文件中找到结构时,您可以根据xpath完全搜索您的文件。

xmllint --html --xpath <xpath> <file> 

但是很多有效的方法是使用Python和Beautiful Soup