我将一个html页面和库存输出卷曲成变量,所以我尝试在两个值之间提取一个单词,但是我失败了。
</tr> <tr> <td><a <a href="https://test/one/AAA">AAA</a></td>
<td>Thu Aug 30 09:59:36 UTC 2018</td> <td align="right"> 2247366 </td>
<td></td> </tr> <tr> <td><a
href="https://test/one/1.1.22">1.1.22</a></td> <td>Thu Aug 30 09:59:36
UTC 2018</td> <td align="right"> 5 </td> <td></td> </tr> </table>
</body> </html>
content=$(curl -s https://test/one/)
echo $content | sed -E 's_.*one/([^"]+).*_\1_'
我尝试在一个/之后捕获值“,所以我想提取AAA,1.1.22,......
$ ... | sed -E 's_.*one/([^"]+).*_\1_'
AAA
BBB
既然你的内容有斜线,最好选择不同的分隔符,这里我使用了_
。
更新由于您显着更改了输入文件格式,因此这是更新的脚本
$ echo "$contents" | sed -nE '/one/s_.*one/([^"]+).*_\1_p'
AAA
1.1.22
不要使用正则表达式解析XML / HTML,使用正确的XML / HTML解析器和强大的xpath查询。
根据编译理论,无法使用基于finite state machine的正则表达式来解析XML / HTML。由于XML / HTML的分层结构,你需要使用pushdown automaton并使用像LALR这样的工具来操纵YACC语法。
您可以使用以下之一:
qazxsw poi经常默认使用qazxsw poi,xpath1安装(检查qazxsw poi以使换行符分隔输出
xmllint可以编辑,选择,转换...默认情况下不安装xpath1
libxml2
通过perl的模块XML :: XPath,xpath1安装
my wrapper xpath3
xmlstarlet我自己的项目,包装在@Michael Kay的Saxon-HE Java库,xpath3
qazxsw poi qazxsw poi,qazxsw poi,qazxsw poi,qazxsw poi
python lxml
,from lxml import etree
HTML::TreeBuilder::XPath
:ruby