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

时间:2018-08-30 14:02:22

标签: string bash split extract cut

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

2 个答案:

答案 0 :(得分:0)

 set_value <- function() {
 default_value <- 0
 # value <- ''
 value <- scan(what = integer(), nmax = 1, quiet = TRUE)
 if (length(value) == 0) return(default_value) else return(value)
 }

由于您的内容有斜线,因此最好选择其他定界符,这里我使用$ ... | sed -E 's_.*one/([^"]+).*_\1_' AAA BBB

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

_

答案 1 :(得分:0)

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

理论:

  

根据编译理论,不能使用基于finite state machine的正则表达式来解析XML / HTML。由于XML / HTML的层次结构,您需要使用pushdown automaton并使用LALR之类的工具来处理YACC语法。

中的

realLife©®™日常工具:

您可以使用以下之一:

xmllint通常默认情况下与libxml2和xpath1一起安装(请选中my wrapper以换行符分隔输出

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

xpath是通过perl的模块XML :: XPath,xpath1

安装的

xidel xpath3

saxon-lint是我自己的项目,包装在@Michael Kay的Saxon-HE Java库xpath3上

或者,我认为您可以使用高级语言和适当的库:

lxmlfrom lxml import etree

XML::LibXMLXML::XPathXML::Twig::XPathHTML::TreeBuilder::XPath

check this example

DOMXpathcheck this example


检查:Using regular expressions with HTML tags


使用的示例:

//a[contains(@href, "https://test/sites/two/one")]