我有一个如下所示的 HTML 文件:
<td class='job-title'>
<h3>
<a href="/postings/46670">Line Cook</a>
</h3>
</td>
我正在尝试Line Cook
从上面的 HTML 中获取 的值。我将如何使用 grep 和正则表达式来做到这一点?
这条简短的 grep 行应该可以完成这项工作:
grep -oP "(?<=>)[^<]*" file
但是,您的 HTML 代码必须采用该格式(例如>Line Cook<
)必须位于一行,否则 grep 将失败。如果 HTML 很大,最好使用解析器。
这可能是也可能不是您想要的,具体取决于文件的其余部分:
$ gawk -F'[<>]' -v RS='</td>\n' '{print $(NF-4)}' file
Line Cook
我也有类似的挑战。我需要使用 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