将HTML解析为数组只返回一个单词

时间:2015-10-06 01:08:38

标签: arrays bash parsing awk sed

我正在尝试使用Bash和html-xml-utils将一些HTML字幕解析为数组,并且我尝试使用Lynx转储来完善它,但我遇到了同样的问题,因为我不能让我的sed一次将多个单词放入数组中。

代码:

    array=($(echo $PAGE |
       hxselect -i ".sub_info_container .sub_title" |
       sed -r 's/.*\">(.*)<\/a>.*/\1/' ))

echo $array

这被传递到sed:

<div class="sub_title"><a class="sub_title" href="/link">Some Random Title.</a></div><div class="sub_title"><a class="sub_title" href="/link2">Another subtitle I want.</a>

echo $array的输出:

Some

我想要的是:

Some Random Title

没有标点符号会很好,字幕通常有?!而不是句号,但它也可以包括标点符号。

我尝试过的事情:

  • 使用Lynx来完善代码,然后使用awk来获取元素
  • 许多不同的sedawk抓取文字的方法

2 个答案:

答案 0 :(得分:1)

我不知道为什么,但我的代码最终将空格分成了单独的项目。解决方案是以下代码:

array=($(echo $PAGE |
       hxselect -i ".sub_info_container .sub_title" |
       lynx -stdin -dump | tr " " - ))

我用tr将空格变成破折号,允许它传递给数组。正如我所说的那样,按照每个人的建议实际删除了将值赋值给数组的功能,取消了额外的括号。代码完成后,我只需将所有破折号重新转换回空格。它不漂亮但它有效!

答案 1 :(得分:0)

试试这个:

<div class="sphere"></div>

我必须在div之间添加换行符以匹配两者。我对sed并不是那么好,如果没有它就无法弄清楚如何去做。

你的主要问题是额外的括号

s='<div class="sub_title"><a class="sub_title" href="/link">Some Random Title.</a></div><div class="sub_title"><a class="sub_title" href="/link2">Another subtitle I want.</a>'

array=$(echo "$s" | sed 's/<\/div><div /\n/' | sed -r 's/.*\">(.*)<\/a>.*/\1/g')

echo "$array"