介紹如何在 Bash 指令稿中使用正規表示法(regular expression)匹配字串。
正規表示法比對字串
在 Bash 指令稿中若需要使用到正規表示法(regular expression)來比對字串內容,可以透過雙中括號搭配 =~
運算子的方式:
# 含有文字的變數 str="Hello, world." # 以正規表示法比對字串 if [[ $str =~ ^Hello ]]; then echo "比對成功。" else echo "比對失敗。" fi
比對成功。
如果只需要在匹配成功時,執行指定的動作,可以使用以下這種簡潔的寫法:
# 簡潔的寫法 [[ $str =~ ^Hello ]] && echo "比對成功。"
比對成功。
取得匹配成功的字串
在以正規表示法匹配字串時,如果想要取得匹配成功的文字內容,可以使用小括號將要擷取的部分包起來,並透過 BASH_REMATCH
這個特殊變數來取得匹配結果:
# 含有文字的變數 str="John Smith" # 以正規表示法比對字串 if [[ $str =~ ^([A-Za-z]+) ([A-Za-z]+)$ ]]; then echo "完整比對字串:${BASH_REMATCH[0]}" echo "第 1 部分字串:${BASH_REMATCH[1]}" echo "第 2 部分字串:${BASH_REMATCH[2]}" else echo "比對失敗。" fi
完整比對字串:John Smith 第 1 部分字串:John 第 2 部分字串:Smith
若以正規表示法比對成功時,BASH_REMATCH[0]
就會包含整個正規表示法所比對到的字串內容,而 BASH_REMATCH[1]
、BASH_REMATCH[2]
就會包含第一個與第二個小括號所對應的內容,若有更多小括號則以此類推。