shell中的正則表達式和通配符

shell中的正則表達式和通配符

正則表達式

正則表達式包含以下一個或多個組成部分

字符集:一組字符

錨:表領(lǐng)了正則表達式在文本中要匹配的位置。例如^和$

修飾符:用于展開或者縮小正則表達式匹配文本行的范圍。例如*,(),\。

正則表達式主要的內(nèi)容

星號*

匹配前一個字符任意多次(含0)。

例如:“123*”表示匹配12+任意多次的3

點.

匹配除了換行以外的任意一個字符

例如:“12.”會匹配12+任意一個字符(包括空格),但不匹配12,因為這個位置少了一個字符

^

匹配一行的開頭。也有可能表示否定一個字符集。

$

匹配行尾。

因此可知“^$”可以用于匹配空行

方括號[]

表示匹配括號中的一個字符。

例如:

“[xyz]”會匹配字符x或者y或者z

“[c-n]”匹配從字符c到n之間的任意一個字符

"[B-Pk-y]" 匹配從B到P 或從k到y(tǒng)的任意一個字符.

"[a-z0-9]" 匹配任意小寫字母或數(shù)字.

"[^b-d]" 匹配除了從b到d范圍內(nèi)所有的字符. 這是正則表達式中反轉(zhuǎn)意思或取否的一個例子。

反斜杠\

轉(zhuǎn)義字符,使一個字符表示其字面上的意思。

尖角號(須轉(zhuǎn)義)\<\>

表示單詞的邊界。

例如:“\<the\>”會匹配單詞the,但是不會匹配them等。

正則表達式的擴展符號

問號?

匹配0個或者1個前面的字符

加號+

匹配1個或者多個前面的字符。與*相似,但是不匹配0個字符。

大括號\{\}(須轉(zhuǎn)義)

指示前面正則表達式的匹配的次數(shù)。

例如“[0-9]\{5\}”精確匹配5個數(shù)字。

圓括號()

括起一組正則表達式用于做或操作之類。

豎線|

或操作,用于匹配一組字符。

例如:

“(0-5) | (a-c)”會匹配一個0-5的數(shù)字或者a-c的字母。

POSIX字符類

[:alnum:] 匹配字母和數(shù)字.等同于A-Za-z0-9.

[:alpha:] 匹配字母. 等同于A-Za-z.

[:blank:] 匹配一個空格或是一個制表符(tab).

[:cntrl:] 匹配控制字符.

[:digit:] 匹配(十進制)數(shù)字. 等同于0-9.

[:graph:](可打印的圖形字符). 匹配 ASCII 碼值的33 - 126之間的字符. 這和下面提到的[:print:]一樣,但是不包括空格字符.

[:lower:] 匹配小寫字母. 等同于a-z.

[:print:] (可打印字符). 匹配 ASCII碼值 32 - 126之間的字符. 這和上面提到的[?:graph:?] 一樣,但是增多一個空格字符。

[:space:] 匹配空白字符 (空格符和水平制表符).

[:upper:] 匹配大寫字母. 等同于A-Z.

[:xdigit:] 匹配十六進制數(shù)字. 等同于0-9A-Fa-f.

通配符

Bash本身沒有正則表達式的功能.在腳本里,使用正則表達式的是命令和軟件包,例如sed和awk,它們可以解釋正則表達式.

Bash所做的是展開文件名擴展,這就是所謂的通配(globbing) ,但它不是使用標(biāo)準(zhǔn)的正則表達式. 而是使用通配符. 通配解釋標(biāo)準(zhǔn)的通配符:和?, 方括號括起來的字符,還有其他的一些特殊的字符(比如說^用來表示取反匹配).然而通配機制的通配符有很大的局限性. 包含有號的字符串將不會匹配以點開頭的文件,例如.bashrc另外,通配機制的? 字符和正則表達式中表示的意思不一樣.

通配符種類

星號*

匹配 0 或多個字符

問號?

匹配任意一個字符,但是必須有一個字符。

[list]

匹配 list 中的任意單一字符。注意只能有一個。

[!list]

匹配除了 list 中的任意單一字符。注意只能有一個。

[a-c]

匹配a到c的任一個字符

{string1,string2...}

匹配括號里面的任一個字符串。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 正則表達式到底是什么東西?字符是計算機軟件處理文字時最基本的單位,可能是字母,數(shù)字,標(biāo)點符號,空格,換行符,漢字等...
    獅子挽歌閱讀 2,176評論 0 9
  • 注:本篇文章只為方便查看,特此保留,如有冒犯,敬請諒解!!! 本文目標(biāo) 30分鐘內(nèi)讓你明白正則表達式是什么,并對它...
    阿杰Alex閱讀 1,507評論 0 10
  • 版本:v2.3.5 (2017-6-12) 作者:deerchao 轉(zhuǎn)載請注明來源 目錄 跳過目錄 本文目標(biāo) 如何...
    readilen閱讀 982評論 2 13
  • http://www.jb51.net/tools/zhengze.html 正則表達式30分鐘入門教程 版本:v...
    nullleaf閱讀 623評論 0 2
  • 《Linux命令行與shell腳本編程大全》,4 E -- Chapter 20 一、 什么是正則表達式 1. 定...
    生信擺渡閱讀 872評論 2 3