Bash。正则表达式匹配
问题描述:
我正在开发一个bash脚本,需要一些复杂的正则表达式帮助...至少对我来说很复杂!Bash。正则表达式匹配
在将卡放入监视器模式后,我有一些可能的输出变化很小,取决于发行版和aircrack套件版本,它们几乎没有变化。一些字符串我需要解析是:
(mac80211 monitor mode vif enabled for [phy0]wlan0 on [phy0]wlan0mon)
(mac80211 monitor mode vif enabled on [phy0]wlan0mon
(monitor mode enabled on wlanmon0)
(monitor mode enabled on wlanmon0
我需要从这些字符串取接口的新名字......在这种情况下如此wlan0mon,但可以根据卡的不同。
正如你所看到的,有时候会有最后一个括号“)”,有时候没有。有时我有[某事],有时候不是。我需要从“开始”(注意后面的空间)取出这些变化,直到结束......我有一种方法,但没有快乐。它只适用于具有“]”的字符串,并且不知道如何避免所有可能性。
[[ ${new_interface} =~ ^(.*)\]+([a-zA-Z0-9]+)\)?$ ]] && new_interface="${BASH_REMATCH[2]}"
有什么建议吗?谢谢!
答
这将是更简单的
[[ ${new_interface} =~ \]?([A-Za-z0-9]+)\)?$ ]] && new_interface="${BASH_REMATCH[1]}"
答
哦,我知道了......绝望让我测试,测试和测试......最后,我得到了它与所有变化的工作。这是解决办法:
[[ ${new_interface} =~ ^(.*on[[:space:]])(\[.*\])?([a-zA-Z0-9]+)\)?$ ]] && new_interface="${BASH_REMATCH[3]}"
干杯。
考虑在\使用字符类[A-ZA-Z0-9] '=〜\(\ [[[:alnum:]] + \]) ?([[:alnum:]] +)?\)$' – diwo