【问题标题】:Bind regex match to variable in bash将正则表达式匹配绑定到bash中的变量
【发布时间】:2020-04-05 09:36:54
【问题描述】:

我一直在尝试从 xml 字符串中匹配单个 IPv4 地址并将其绑定到变量以供以后使用。我已经在一些在线测试器中测试了正则表达式本身,它似乎可以与一些示例输出一起使用。我还使用更简单的正则表达式和模式测试了类似于下面的 BASH_REMATCH 并且它可以工作。那么我的正则表达式本身与 bash 不兼容是否存在问题?

示例脚本...

#!/bin/bash
rawxml="<ip-netmask>1.2.3.4/32</ip-netmask>"
ipv4regex="(((?:|\.)(2(?:5[0-5]|[0-4]\d)|1?\d?\d)){4})"

# Finding IP from $rawxml and binding it to its own variable
if [[ $rawxml =~ $ipv4regex ]]; then
        ipfound=${BASH_REMATCH[1]}
fi

echo "IP found is "$ipfound""

这里的预期输出是....

“找到的 IP 是 1.2.3.4”

【问题讨论】:

    标签: regex bash ubuntu


    【解决方案1】:

    使用

    xmllint --xpath '//ip-netmask/text()' file.xml
    

    真正的 XML 解析器是比正则表达式更好的工具来解析 XML

    【讨论】:

    • 注明。会试一试的。
    • 确认这比尝试使用正则表达式容易 1000 倍。用新方法更新 OP
    猜你喜欢
    • 2016-10-22
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多