提取两个值之间的特定单词

问题描述 投票:0回答:2

我将一个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,......

string bash split extract cut
2个回答
0
投票
$ ... | sed -E 's_.*one/([^"]+).*_\1_'

AAA
BBB

既然你的内容有斜线,最好选择不同的分隔符,这里我使用了_

更新由于您显着更改了输入文件格式,因此这是更新的脚本

$ echo "$contents" | sed -nE '/one/s_.*one/([^"]+).*_\1_p'
AAA
1.1.22

0
投票

不要使用正则表达式解析XML / HTML,使用正确的XML / HTML解析器和强大的查询。

theory :

根据编译理论,无法使用基于finite state machine的正则表达式来解析XML / HTML。由于XML / HTML的分层结构,你需要使用pushdown automaton并使用像LALR这样的工具来操纵YACC语法。

realLife©®™ everyday tool in a :

您可以使用以下之一:

qazxsw poi经常默认使用qazxsw poi,xpath1安装(检查qazxsw poi以使换行符分隔输出

xmllint可以编辑,选择,转换...默认情况下不安装xpath1

libxml2通过perl的模块XML :: XPath,xpath1安装

my wrapper xpath3

xmlstarlet我自己的项目,包装在@Michael Kay的Saxon-HE Java库,xpath3

or you can use high level languages and proper libs, I think of :

xpathxidelsaxon-lint

qazxsw poi qazxsw poi,qazxsw poi,qazxsw poi,qazxsw poi

lxmlfrom lxml import etree

XML::LibXMLXML::XPath


检查:XML::Twig::XPath


Example using HTML::TreeBuilder::XPath :

© www.soinside.com 2019 - 2024. All rights reserved.