我试图从看起来像这样的HTML输出中获取数据:

<strong>Target1NoSpaces</strong><span class="creator"> ....
<strong>Target2 With Spaces</strong><span class="creator"> ....

我正在使用管道火车将数据缩减到我要达到的目标。到目前为止,这是我的方法:
grep "/strong" output.html | awk '{print $1}'

Grep在“/strong”上获取与目标线;效果很好。

用管道输送到'awk'{print $ 1}'。当目标没有空格时,在情况#1中有效,但是当目标具有空格时,在情况#2中无效。.仅保留第一个单词,如下所示:
<strong>Target1NoSpaces</strong><span
<strong>Target2

在我的awk或其他命令中,您是否有任何提示正确击中目标?任何快速而又肮脏的东西(grep,awk,sed,perl)将不胜感激。

最佳答案

在grep中使用Perl regex的先行和先行功能。它应该比使用awk更简单。

grep -oP "(?<=<strong>).*?(?=</strong>)" file

输出:
Target1NoSpaces
Target2 With Spaces

添加:

Perl的regex的Ruby多重匹配实现可以匹配多行中的值:
ruby -e 'File.read(ARGV.shift).scan(/(?<=<strong>).*?(?=<\/strong>)/m).each{|e| puts "----------"; puts e;}' file

输入:
<strong>Target
A
B
C
</strong><strong>Target D</strong><strong>Target E</strong>

输出:
----------
Target
A
B
C
----------
Target D
----------
Target E

09-26 05:38