linux下正則表達式

正則表達式是一種處理字符串的方法,是一組具有一定性質的字符串的描述,我自己認爲正則表達式就是字符串的模板。

在Linux中,正則表達式以行爲單位進行字符串的進行處理,通過一些特殊字符串的輔助,可以讓用戶輕易達到查找、刪除和替換某指定字符串的處理程序。

按照嚴謹程度,可以分爲基礎正則表達式和擴展正則表達式。我們一般使用的是基礎正則表達式,不過爲了更簡單地完成複雜的字符串處理動作,就要使用擴展正則表達式。

基礎正則表達式:

特殊符號 代表意義
[:alnum:] 英文大小寫字符及數字 0-9 A-Z a-z
[:alpha:] 英文字符 A-Z a-z
[:digit:] 數字 0-9
[:lower:] 小寫英文字符 a-z
[:upper:] 大寫英文字符 A-Z
[:blank:] 空格、Tab
[:punct:] 標點符號 " ' ? ! ; : # $
[:space:] 任何會產生空白的字符,空格、Tab、CR
[:print:] 任空格符(空格鍵和Tab)外的其他所有按鍵
[:xdigit:] 十六進制數字類型 0-9 A-F a-f
[:cntrl:] 鍵盤上面的控制按鍵 CR LF TAB DEL
^ 一行的開頭
$ 一行的結束
* 前一個字符出現0次會多次
. 任意字符
[list] 表示其中一個 有且僅有一個 括號內的元素爲or的關係 例如[abcd]爲abcd中的一個
\ 轉義字符 例如在正則表達式中.代表任意字符,若果要找出含有點的行該怎麼辦? \.
[n1-n2] 字符範圍 強調的是範圍 根據編碼方式,位置在n1和n2的字符中的一個。  [A-Z] 
[^list] 反向選擇 例如 不包含abc的一行 [^abc]
{n,m} [n], {n,} 對前面字符(組)的次數範圍的限定 a{2,5} a出現2-5次, a{2} a出現2次, a{2,} a出現2次或2次以上
   


擴展正則表達式

特殊符號

代表意義

+

前面的一個字符出現一次或多次 一次以上

?

前面的字符出現0次或一次

|

或(or) abc|bcd

()

組字符串 glad或good g(la|oo)

()+

括號中的字符串出現一次或多次 例 A(xyz)+C 可匹配的字符串有AxyzC AxyzxyzC等

注:

  1. 在正則表達式中 ! 不是特殊符號,並不表非!的意思。
  2. ( ) 是對字符串來說,而 [ ] 是對單個字符來說,例如找出A和C之間含有abcd任一字符的行,則正則表達式可表示爲A[abcd]C。而找出A和C之間含有abcd或efgh這兩種字符串時,正則表達式爲A(abcd|efgh)
  3. 使用 [ ] 表示的當然也能夠使用()和|表示,只是 | 的每一個元素是一個字符,而不是一個字符串。
  4. | 可以表示兩個字符串的或,例如找出含有glad或me的行,正則表達式爲glad|me
  5. 正則表達式與shell下的通配附是兩碼事,正則表達式有自己的特殊符號,shell的通配符也有自己的特殊符號,有時兩者含有相同的特殊符號但是意思卻不一樣,例如在shell的通配符中*表示任意多個任意字符,而在正則表達式中*表示前面的字符出現0次或多次。有時,在兩者中意思一樣,但使用的特殊符號不同,例如,在shell中使用?表示必須存在的任意字符,但在正則表達式中 . 表示任意字符。當然也有使用相同符號表示相同含義的,例如\表示轉義字符。
下面給出shell環境中的特殊字符和它們的含義,以作區分。

特殊符號

代表意義

#

批註符號,常用在shell script中

\

轉義字符

:

連續執行命令的分隔符(與管道分隔符不同)

~

用戶的主文件夾

$

使用變量前導符,用來表示一個變量

&

作業控制,將命令變成背景下工作

!

邏輯非

/

路徑分隔符

>,>>

數據流重定向,輸出導向

<,<<

數據流重定向,輸入導向

‘ ’

單引號,不具有變量置換的功能

“ ”

雙引號,具有變量置換的功能

` `

反單引號,可以先執行的命令,也可使用$()

( )

中間爲子shell的起始與結束

{ }

中間爲命令塊的組合

通配符

代表意義

*

0到無窮多個任意字符

?

有且僅有一個任意字符

[ ]

有且僅有一個括號內的字符

[-]

有且僅有一個在編碼順序內的所有字符

[^]

反向選擇,^表示非得意思



        



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章