击。正则表达式匹配

时间:2016-05-29 10:52:31

标签: regex bash aircrack-ng

我正在开发一个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]}"

有什么建议吗?谢谢!

2 个答案:

答案 0 :(得分:1)

这将更加简单

[[ ${new_interface} =~ \]?([A-Za-z0-9]+)\)?$ ]] && new_interface="${BASH_REMATCH[1]}"

答案 1 :(得分:0)

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

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

干杯。