1

我正在开发一个 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,但可能会因卡而异。

如您所见,有时有最后的括号“)”,有时没有。有时我有[东西],有时没有。我需要从“on”(注意on之后的空格)到这些变化的结尾......我有一个方法,但没有快乐。它仅适用于具有“]”的字符串,并且不知道如何避免所有可能性。

[[ ${new_interface} =~ ^(.*)\]+([a-zA-Z0-9]+)\)?$ ]] && new_interface="${BASH_REMATCH[2]}"

有什么建议吗?谢谢!

4

2 回答 2

1

这会简单得多

[[ ${new_interface} =~ \]?([A-Za-z0-9]+)\)?$ ]] && new_interface="${BASH_REMATCH[1]}"
于 2016-05-29T11:21:24.090 回答
0

哦,我明白了......绝望让我测试和测试和测试......最后我让它与所有变化一起工作。这是解决方案:

[[ ${new_interface} =~ ^(.*on[[:space:]])(\[.*\])?([a-zA-Z0-9]+)\)?$ ]] && new_interface="${BASH_REMATCH[3]}"

干杯。

于 2016-05-29T11:17:35.570 回答