bash regex:获取跨越多行的html标签之间的值

时间:2013-02-07 22:05:55

标签: regex grep

我有一个HTML文件,如下所示:

<td class='job-title'>
<h3>
<a href="/postings/46670">Line Cook</a>
</h3>
</td>

我正在尝试从上面的HTML中获取Line Cook的值。 我将如何使用grep和正则表达式来实现这一目标?

3 个答案:

答案 0 :(得分:2)

这个简短的grep线应该可以胜任:

grep -oP "(?<=>)[^<]*" file 

但是,您的HTML代码必须采用该格式(例如>Line Cook<)必须在一行上,否则grep将失败。如果HTML很大,你最好转向解析器。

答案 1 :(得分:0)

这可能是您想要的,也可能不是您想要的,具体取决于文件的其余部分:

$ gawk -F'[<>]' -v RS='</td>\n' '{print $(NF-4)}' file
Line Cook

答案 2 :(得分:0)

我遇到了类似的挑战。我需要使用Jenkins的shell脚本捕获HTML响应中最后一个表格单元格的内容。

<BODY bgcolor=#dddddd>
<TABLE bgcolor=#dddddd border=1>
<TR>
<TD valign="top"><B>aliasName</B></TD>
<TD>jms_aliasName</TD>
</TR>
<TR>
<TD valign="top"><B>messageCount</B></TD>
<TD>0</TD>
</TR>
</TABLE>
</BODY>

使用curl调用服务来创建这个页面我将它传送到下面并放入变量。

response=`/usr/bin/curl -s http://$host:$port/invoke/CustomService?aliasName=jms_aliasName | sed -n '/<TD>/,/<\/TD>/H; /<TD>/h; /\/TD/{x;s/<TD>\(.*[^\n]\)\n*<\/TD>/\1/p;}' | tail -n 1`

感谢其他人的sed命令,这是神奇的。

| sed -n '/<TD>/,/<\/TD>/H; /<TD>/h; /\/TD/{x;s/<TD>\(.*[^\n]\)\n*<\/TD>/\1/p;}' | tail -n 1