說道要擷取特定字串,或是找尋某種格式內容,最強的工具莫過於是採用正規化表示法(regular expression)了。
說道要擷取特定字串,或是找尋某種格式內容,最強的工具莫過於是採用正規化表示法(regular expression)了。正規化表示法不是一種指令,也不是一種程式語言,他是一種被廣為支援的字串表示方式,通常用來定義某種通用格式。例如我們習以為常的使用'*.*'來代表所有檔案名稱,這就類似一種正規化表示法,以星號(*)來代表所有。星號(*), 問號(?)都是我們常用來指定通用的字串,但是正規化表示法要稍微嚴僅一點,而且功能要強的多。
舉例來說,如果我們要找出含有 version 這個字眼的字串,再進一步取出它的內容,我們可以採用grep的作法,就像10/2這篇所示範的一樣。但是如果 version 這個字散佈在多個地方,這就麻煩了,因為僅透過grep,你會抓到兩個以上包含verstion的行,如果不能確定是哪一行的結果,就很難將取得版本編號的動作自動化。而透過正規化表示法來增強,就可以改善此一現象。
我的策略是,因為我要的’version’這個字眼其實是在'modinfo qla2xxx'輸出的前頭,而且version後面帶有冒號(version:),所以我只要限定'grep'去搜尋出現在字首的version。以正規化表示法來說,定義字首的符號是**^**,所以我的命令就會改成這樣:
modinfo qla2xxx | grep ^version | awk '{ print $2 }'
這樣的話,如果'version'不是出現在字首,而是句子的中間或後面的話,也就是說version前面還有其他的字時,他就不會被我的grep命令找到。因為在這個正規化表示法的定義中,v是位在這行的開頭的**(^v)**。
[本系列文章]
我與BASH的每一天 - [1]利用bc命令來取得數字字串中的特定欄位值
我與BASH的每一天 - [2]直取字串變數中的特定欄位值
我與BASH的每一天 - [3] 利用awk來擷取特定欄位
我與BASH的每一天 - [4] 利用awk來擷取特定欄位-2
我與BASH的每一天 - [5] 利用awk來擷取特定欄位-3
我與BASH的每一天 - [6] 利用cut來擷取特定欄位
我與BASH的每一天 - [7] grep指令的妙用 - 1
我與BASH的每一天 - [8] grep指令的妙用 - 2