Bash。正则表达式匹配
Bash. regexp matching
我正在开发一个 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,但可能因卡而异。
如您所见,有时有最后一个括号“)”,有时没有。有时我有 [something] 有时没有。我需要从 "on " 开始(注意之后的 space )直到这些变化结束......我有一个方法但没有快乐。它只适用于带有“]”的字符串,不知道如何避免所有可能性。
[[ ${new_interface} =~ ^(.*)\]+([a-zA-Z0-9]+)\)?$ ]] && new_interface="${BASH_REMATCH[2]}"
有什么建议吗?谢谢!
哦,我明白了……绝望让我测试、测试、测试……最后我得到了它与所有变体一起工作。这是解决方案:
[[ ${new_interface} =~ ^(.*on[[:space:]])(\[.*\])?([a-zA-Z0-9]+)\)?$ ]] && new_interface="${BASH_REMATCH[3]}"
干杯。
这样会简单很多
[[ ${new_interface} =~ \]?([A-Za-z0-9]+)\)?$ ]] && new_interface="${BASH_REMATCH[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,但可能因卡而异。
如您所见,有时有最后一个括号“)”,有时没有。有时我有 [something] 有时没有。我需要从 "on " 开始(注意之后的 space )直到这些变化结束......我有一个方法但没有快乐。它只适用于带有“]”的字符串,不知道如何避免所有可能性。
[[ ${new_interface} =~ ^(.*)\]+([a-zA-Z0-9]+)\)?$ ]] && new_interface="${BASH_REMATCH[2]}"
有什么建议吗?谢谢!
哦,我明白了……绝望让我测试、测试、测试……最后我得到了它与所有变体一起工作。这是解决方案:
[[ ${new_interface} =~ ^(.*on[[:space:]])(\[.*\])?([a-zA-Z0-9]+)\)?$ ]] && new_interface="${BASH_REMATCH[3]}"
干杯。
这样会简单很多
[[ ${new_interface} =~ \]?([A-Za-z0-9]+)\)?$ ]] && new_interface="${BASH_REMATCH[1]}"