shell之匹配模式和擴充套件匹配模式

2021-10-13 15:19:03 字數 942 閱讀 3448

首先說一下什麼是匹配模式,然後再介紹擴充套件匹配模式。

匹配模式這個概念就算不知道,但是也都會使用這個功能找到匹配的檔案。

例如 ls ab*,找到所有以ab開頭的檔案。這就是利用了*可以匹配任意字串,包括空串。

匹配模式是man bash中的pattern matching,星號的含義在上面講了。

?用來匹配任意單個字元,例如a?c可以匹配到abc,adc,不能匹配空字元,所有不能匹配ac

[…] 用來匹配中括號中的乙個字元,例如a[bc]d,可以匹配abd和acd

如果想匹配* ?呢,需要用反斜槓進行轉義,表示為沒有特殊含義的普通字元

首先建立包含特殊字元的檔案,比如touch a\*c, a\?c, a\]c, a\[c

匹配這些檔案需要 ls a\*c,這樣只能匹配到a*c這個檔案,不會匹配到其他檔案

現在講擴充套件匹配模式

擴充套件匹配模式需要extglob是開啟的,可以通過shopt這個bash的內建命令檢視與設定

shopt extglob 檢視狀態

shopt -s extglob 開啟擴充套件匹配模式,-s是enable/set

shopt -u extglob 關閉擴充套件匹配模式,-u是disable/unset

shopt在man bash的shell builtin commands部分

擴充套件匹配模式額外引入了幾個特殊含義字元以及模式

?(pattern-list) 表示0個或1個模式,pattern-list是用|(豎槓)進行分割的多個模式

*(pattern-list) 表示0個或多個模式

+(pattern-list) 表示1個或多個模式

@(pattern-list) 表示1個模式

!(pattern-list) 表示除這些模式之外的其他

舉個例子 !(a)表示除a以外的其他檔案

!(a|b) 表示除a和b以外的其他檔案

shell指令碼 模式匹配case

case 變數 in 模式1 命令序列1 模式2 命令序列2 模式3 命令序列3 無匹配後命令序列 esac詢問使用者,確定要繼續刪除嗎 yes no y bin bash 1請輸入刪除的使用者名稱 read p please input a username user 2輸出使用者id id us...

MySQL標準和擴充套件的SQL匹配模式

sql標準模式匹配 在sql標準模式匹配中,使用 匹配任何單個字元,而 匹配任意數目字元 包括零字元 注意使用sql匹配模式時,不能使用 或 而應使用like或not like比較操作符。找出以 b 開頭的名字 mysql select from goods where goodsname like...

shell 中 貪婪匹配 和 非貪婪匹配

舉個栗子 1 2 v jfedu.shiyiwen.com echo 乙個 為非貪婪匹配,即匹配最短結果。從右到左進行非貪婪匹配,匹配什麼呢?匹配已 的字元。那麼當然是匹配到了.com 然後執行刪除匹配到的字元。結果就是 這裡的 相當於定界符。而 是萬用字元 jfedu.shiyiwen 1 ech...