3 回答
TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
因?yàn)檫@是一個(gè)常見(jiàn)的常見(jiàn)問(wèn)題解答,所以讓我列出一些Bash不支持的結(jié)構(gòu),以及如何解決它們,這里有一個(gè)簡(jiǎn)單的解決方法。
正則表達(dá)式有多種常用方言。Bash支持的是擴(kuò)展正則表達(dá)式的變體。例如,這不同于許多在線正則表達(dá)式測(cè)試器支持的功能,后者通常是更現(xiàn)代的Perl 5 / PCRE變體。
擊不支持\d \D \s \S \w \W-這些可以與POSIX字符類(lèi)等同替換[[:digit:]],[^[:digit:]],[[:space:]],[^[:space:]],[_[:alnum:]],和[^_[:alnum:]],分別。(請(qǐng)注意最后一種情況,其中[:alnum:]POSIX字符類(lèi)使用下劃線增強(qiáng),以完全等同于Perl的\w速記形式。)
Bash不支持非貪婪匹配。有時(shí)您可以a.*?b用類(lèi)似的東西代替,a[^ab]*b以在實(shí)踐中獲得類(lèi)似的效果,盡管兩者并不完全相同。
Bash不支持非括號(hào)(?:...)。在平凡的情況下,只需使用捕獲括號(hào)即可(...);當(dāng)然,如果您使用捕獲組和/或反向引用,則會(huì)重新編號(hào)捕獲組。
擊不支持lookarounds像(?<=before)或者(?!after),事實(shí)上任何與(?是一個(gè)Perl擴(kuò)展。盡管您經(jīng)常可以將問(wèn)題改寫(xiě)為可以避免環(huán)顧的問(wèn)題,但沒(méi)有簡(jiǎn)單的常規(guī)解決方法。
TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
我知道您已經(jīng)“解決”了這個(gè)問(wèn)題,但是您最初的問(wèn)題很可能就像$regex在測(cè)試中不引用一樣簡(jiǎn)單。即:
if [[ $data =~ "$regex" ]]; then
Bash變量擴(kuò)展將簡(jiǎn)單地放入字符串中,并且原始正則表達(dá)式中的空格將破壞測(cè)試,因?yàn)椋?/p>
regex="^Disk (/dev[\S]+):((?!Disk)[\s\S])*"
if [[ $data =~ $regex ]]; then
等價(jià)于:
if [[ $data =~ ^Disk (/dev[\S]+):((?!Disk)[\s\S])* ]]; then
bash / test會(huì)很有趣地解釋獎(jiǎng)金參數(shù)和所有未引用的元字符。
請(qǐng)記住,bash不會(huì)傳遞變量,而是會(huì)擴(kuò)展變量。
- 3 回答
- 0 關(guān)注
- 558 瀏覽
添加回答
舉報(bào)
