shell程式設計 正規表示式的基礎

2021-08-20 19:40:09 字數 1928 閱讀 7357

所謂正規表示式,就是用來描述某些字串匹配規則的工具。

常見的支援正規表示式的unix工具如下所列:

grep命令族:用於匹配文字行

awk:用於處理字串的語言

more或者less等:檔案檢視程式

簡單地講,正規表示式是對文字進行過濾的工具

乙個正規表示式就是由一系列字元組成的字串,其中包括元字元和普通字元。

擴充套件正規表示式和perl正規表示式都是在基本正規表示式的基礎上加以擴充套件而形成的。

在正規表示式中普通字符集中的字元只表示它們的字面涵義,不對其他字元產生影響。正規表示式的最簡單形式就是只由普通字符集中的字元組成,不包含元字元。

1    行首定位符「^」

用來匹配行首的字元,表示行首的字元是「^」後面的那個字元

str=`ls /etc | grep "^po"`

echo "$str"

2    行尾定位符「$」

用來定位文字行末尾,位於所有字元之後

str=`ls /etc | grep "conf$"`

echo "$str"

注:應理解為,匹配的是移f結尾,同時倒數第2~4個字元分別為n o c 的文字行

「^$」匹配所有的空行,行中沒有任何字元,包括空白字元。

3    單個字元匹配「.」

圓點「.」用來匹配任意單個字元,包括空格,但是不包括換行符「\n」

當使用者使用「.」符號後,意味著該位置一定有乙個字元,無論它是什麼字元。

4    限定字元「*」

星號「*」表示匹配其前導字元的任意次數,包括0次

5    字符集匹配「」

用來指定乙個字元集合:[abc]

只要某個字串在方括號所在的位置上出現了方括號中的任意乙個字元,就都滿足匹配規則。

另外,對於連續的數字或者字母,可以使用連字元「-」來表示乙個範圍,「[a-f]」表示匹配字母表中a到f中任意乙個字母。

6    字符集不匹配「[^]」

[^]表示不匹配其中列出的任意字元  [^abc]

7    限定符「+」

「+」限定前面的字元至少出現一次

grep:使用基本正規表示式

egrep:預設使用擴充套件正規表示式

8    限定符「?」

用來限定前面的字元最多隻出現一次,即出現0次或者1次

9    豎線「|」和圓括號"()"

豎線「|」表示多個正規表示式之間「或」的關係

圓括號「()」表示一組可選值的集合

str=`ls /etc | egrep "(ssh|ssl|^yum)"`

echo "$str"

[abc]等價於(a|b|c)

(jeffrey|jeffery)等價jeff(rey|ery)等價於jeff(re|er)y

注:方括號只能匹配目標文字中的單個字元,而豎線兩邊則可能是完整的正規表示式,也可能是任意長度的文字。

10    perl正規表示式

數字匹配\d,匹配0-9中的任意乙個數字字元,等價於表示式「[0-9]」

非數字匹配\d,與\d的作用恰好相反,匹配乙個非數字字元,等價於"[^0-9]"

空白字元匹配\s,匹配任何空白字元,包括空格、製表符以及換頁符等

非空白字元匹配\s,匹配任何非空白字元

11    posix字元類

[:alnum:]    匹配任意乙個字母或數字,等價於a-za-z0-9

[:alpha:]    匹配任意乙個字母,等價於a-za-z

[:digit:]    匹配任意乙個數字,等價於0-9

[:lower:]    匹配任意乙個小寫字母

[:upper:]    匹配任意乙個大寫字母

[:space:]    匹配任意乙個空白字元,包括空格,製表符,換行符,以及分頁符等

與其他普通字元一樣,上述字元也需要放在方括號中,例如:[[:alnum:]]等價於[a-za-z0-9]

shell程式設計基礎 正規表示式

正規表示式 匹配包含的文字字串 正則是包含的關係,只要包含就匹配 grep v 取反 基礎正規表示式 使用grep e的時候最後三個 不要加反斜號 擴充套件正規表示式 練習題 1 顯示 proc meminfo檔案中以大寫s和a開頭的行 egrep a s proc meminfo2 顯示 etc ...

shell程式設計 正規表示式

正規表示式是用於字元排列和匹配模式的一種語法規則。它主要用於字串的模式分割 匹配 查詢及替換操作。萬用字元 元字元作用 前乙個字元匹配0次或任意多次。匹配除了換行符外任意乙個字元。匹配行首。例如 hello會匹配以hello開頭的行。匹配行尾。例如hello 會匹配以hello結尾的行。匹配中括號中...

shell程式設計 正規表示式

正規表示式是一種用於文字匹配的通用語言。正規表示式的基本組成部分 正規表示式 描述例子 行起始標記 abc匹配以abc起始的行 行結束標記 abc 匹配以abc結束的行 匹配任意乙個字元 abc 匹配abc後跟任意乙個字元 匹配包含在 字元 之中的任意乙個字元 abc de 匹配abcd 或者 ab...