第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Bash正則表達(dá)式-似乎無(wú)法匹配\ s,\ S等

Bash正則表達(dá)式-似乎無(wú)法匹配\ s,\ S等

喵喔喔 2019-11-03 15:04:29
我有一個(gè)腳本試圖從gparted獲取信息塊。我的數(shù)據(jù)如下所示:Disk /dev/sda: 42.9GBSector size (logical/physical): 512B/512BPartition Table: msdosNumber  Start   End     Size    Type     File system     Flags 1      1049kB  316MB   315MB   primary  ext4            boot 2      316MB   38.7GB  38.4GB  primary  ext4 3      38.7GB  42.9GB  4228MB  primary  linux-swap(v1)log4net.xmlModel: VMware Virtual disk (scsi)Disk /dev/sdb: 42.9GBSector size (logical/physical): 512B/512BPartition Table: msdosNumber  Start   End     Size    Type     File system     Flags 1      1049kB  316MB   315MB   primary  ext4            boot 5      316MB   38.7GB  38.4GB  primary  ext4 6      38.7GB  42.9GB  4228MB  primary  linux-swap(v1)我使用正則表達(dá)式將其分為兩個(gè)磁盤(pán)塊^磁盤(pán)(/ dev [\ S] +):((?! Disk)[\ s \ S])*這適用于多行。當(dāng)我在bash腳本中對(duì)此進(jìn)行測(cè)試時(shí),我似乎無(wú)法匹配\ s或\ S-我在做什么錯(cuò)?我正在通過(guò)如下腳本進(jìn)行測(cè)試:data=`cat disks.txt`morematches=1x=0regex="^Disk (/dev[\S]+):((?!Disk)[\s\S])*"if [[ $data =~ $regex ]]; thenecho "Matched"while [ $morematches == 1 ]do        x=$[x+1]        if [[ ${BASH_REMATCH[x]} != "" ]]; then                echo $x "matched" ${BASH_REMATCH[x]}        else                echo $x "Did not match"                morematches=0;        fidonefi但是,當(dāng)我遍歷正則表達(dá)式的各個(gè)部分時(shí),無(wú)論何時(shí)匹配\ s或\ S,它都不起作用-我在做什么錯(cuò)?
查看完整描述

3 回答

?
阿晨1998

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ī)解決方法。



查看完整回答
反對(duì) 回復(fù) 2019-11-04
?
幕布斯7119047

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ò)展變量。



查看完整回答
反對(duì) 回復(fù) 2019-11-04
  • 3 回答
  • 0 關(guān)注
  • 558 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)