我将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,...
答案 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解析器和强大的xpath查询。
shell中的根据编译理论,不能使用基于finite state machine的正则表达式来解析XML / HTML。由于XML / HTML的层次结构,您需要使用pushdown automaton并使用LALR之类的工具来处理YACC语法。
您可以使用以下之一:
xmllint通常默认情况下与libxml2
和xpath1一起安装(请选中my wrapper以换行符分隔输出
xmlstarlet可以编辑,选择,转换...默认情况下未安装xpath1
xpath是通过perl的模块XML :: XPath,xpath1
安装的xidel xpath3
saxon-lint是我自己的项目,包装在@Michael Kay的Saxon-HE Java库xpath3上
python的lxml
(from lxml import etree
)
perl的XML::LibXML
,XML::XPath
,XML::Twig::XPath
,HTML::TreeBuilder::XPath
ruby nokogiri,check this example
php DOMXpath
,check this example
检查:Using regular expressions with HTML tags
//a[contains(@href, "https://test/sites/two/one")]