2016-05-29 126 views
1

我正在開發一個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]}" 

有什麼建議嗎?謝謝!

回答

1

這將是更簡單的

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

哦,我知道了......絕望讓我測試,測試和測試......最後,我得到了它與所有變化的工作。這是解決辦法:

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

乾杯。

+0

考慮在\使用字符類[A-ZA-Z0-9] '=〜\(\ [[[:alnum:]] + \]) ?([[:alnum:]] +)?\)$' – diwo