Linux Bash之正則表達式


首先注意:正則表達式與通配符是完全不同的概念。通配符(wildcard)代表的是 Bash 操作接口的一個功能,而正則表達式是一種字符串處理的表示方式,一定要區分開來。

正則表達式(Regular Expression)是通過一些特殊字符的排列,用以查找/替換/刪除一行或多行文字字符串。

也即是說,正則表達式是用在字符串處理上的一項表達式,它不是一個工具程序,而是一個字符串處理的標准依據,如果我們想以正則表達式的方式處理字符串,就要使用支持正則表達式的工具程序,如 vim、sed、awk、grep 等。

A regular expression is a pattern that describes a set of strings.
regexp are constructed analogously to arithmetic expressions, by using various operators to combine smaller expressions.
grep understands three different regexp syntax: “basic” (BRE), “extended” (ERE) and “perl” (PCRE).
In GNU grep, there is no difference in available functionality between basic and extended syntaxes.

首先介紹第一部分,基本正則表達式的基本組成部分,見表1-1,如果想要在大部分機器上都可以使用的可移植腳本,只使用基本組成部分是一個好的選擇。

基本正則與擴展正則的區別在於,基本正則中,字符(? + | {} ()  )被解釋為普通字符,也即其字面意思,如果要使用其對應的特殊含義,如使用  ()  表示選項列表,  |  表示選項等,需要加反斜杠  \  轉義。

而在擴展正則中,默認字符(  ? + | {} ()  )被解釋為特殊含義,如果要使用其對應的普通字符含義,需要加反斜杠  \  轉義。

然后來看第二部分,對於 Shell 中的 POSIX 字符,如表1-2所示,基本上可以根據符號猜出其含義,即所謂望文生義,比較容易記憶。這部分對基本正則,擴展正則以及 Perl 格式的正則表達都是一樣的,特定的符號特定的含義。

Such certain named classes of characters are predefined within bracket expressions. Their names are self explanatory.

 

接下來是第三部分,元字符及其含義和使用示例,如表1-3所示,這里也只是給出基本正則和擴展正則中支持的元字符,對於Perl風格的正則能支持的更多的字符在稍后的部分展示。 

The symbol \b matches the empty string at the edge of a word, and \B matches the empty string provided it's not at the edge of a word.
The symbol \w is a synonym for [_[:alnum:]] and \W is a synonym for [^_[:alnum:]].
The symbols \< and \> respectively match the empty string at the beginning and end of a word.

第四部分,對於擴展正則以及 Perl 風格的正則,其所支持的功能更多更復雜,使用起來也是更方便,其在基本正則的基礎上又有一些新的表示和約定,如表1-4所示。

最后一部分, Perl 風格的正則相對於基本正則和擴展正則而言能支持更豐富的元字符,如表1-5所示,有了更多的定義和用法。

參考資料

[1] Shell正則表達式

[2] ASCII


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM