shell指令碼 正規表示式

2022-03-11 04:16:53 字數 2703 閱讀 6534

正規表示式分為基礎正則和擴充套件正則,都是為了匹配符合預期要求的字串

只需要記住,對檔案內容或是展示文字的操作都是正則,而對目錄或檔名的操作則都是萬用字元(例如find指令)

擴充套件正則包含基礎正則,而且多出了  +    ?   |    ()四個指令(注意這裡的|要和管道符分開)

擴充套件正則不需要像基礎正則一樣對某些符號進行轉義(一般是用 反斜槓\來進行) 

符號描述

例項.

代表單個字元(必須存在)

a..b

可以表示acdb

aaab 、abbbb

但不可以表示acb、ab、aba等

*

要和萬用字元區分開,匹配 * 前面乙個字元的0個或多個

*後面的字元一定要在*前面字元的後面

另外*前後字元必須相鄰否則匹配不到

a*b可以表示ab、aab、b、abababab

但不可以表示acb、ba等

acb只會匹配到b,也就是視為b前面有0個a

ba也只會匹配到b,同樣視為b前面有0個a

^

匹配 ^ 後面字串開頭

輸入:echo  -e  abcd\accc | grep "^ab"

輸出:abcd

$

匹配 $ 前面字串結尾  

輸入:echo  -e  abcd\accc | grep "cc$"

輸出:accc

.*

匹配任意個字元(0到多個)

a.*b

和萬用字元裡面的 * 大致類似

可以代表ab、 acb、 a……b

但不能代表b……a

表示範圍,可以用來進行模糊匹配

常用選項為【a-z】 【0-9】

1.grep【0-9】 text 過濾出含數字的行

2.grep【a-z】 text 過濾出含小寫字母的行

3.grep 【abc】 text 過濾出含有a,b,c的行(注意這個abc是分別匹配,也就是相當於匹配含有a的行,b的行,c的行,並不是字串abc的行)

{}

表示匹配{}前面字元的至少n個,最多m個 字元,注意:是連在一起的連續字元

還可以為表示至少有n個

表示最多有m個

1.輸入echo abbcdfbjk | grep -e "b"

輸出 abbcdfbjk 

2.如果 輸入 echo abbcdfbjk | grep -e "b"  #表示至少兩個

輸出結果為 abbcdfbjk  可以看到只有連在一起的兩個bb被匹配到,也就是說明了{}裡面的數字表示的不是匹配到的個數,而是匹配字元的長度,像這個例子就是要求出現 b 的長度至少是2,所以只有 bb 被匹配到了

3.輸入 grep -e "acb" 匹配a和b之間至少2個最多5個c的行,但是acb要連在一起

【^】

【^a】表示匹配 a 以外的所有字元

輸入  echo  -e abc \ def \ lmn | grep "[^f-z]"

輸出  abc  def lmn,只有[a-e]配匹配到

^[^]

匹配 ^[^a]中的以a為開頭以外的所有行

grep "^[^#]"  /etc/passwd   匹配  /etc/passwd  裡面不以#開頭的所有行

\<  ;  \>

錨定 單詞首部 (尾部)  

表示在匹配在首部(尾部)以空格或特殊字元為分隔的指定字元。如果同時錨定首尾  \<  \>  則表示這個字元的準確匹配,它的前後為特殊字元或空格分隔,不會和任何字元直接連線

注意:必須要加 \ 轉義,即使使用擴充套件正則也要加  \  進行轉義

輸入 :echo "hi,rootamroot" | grep "\rootamroot

輸入: echo "hiroot iamroot" | grep "root\>"

輸出: hirootiamroot

輸入: echo "hi,root  iamroot" | grep "\"

輸出:hi,rootiamroot

()

\1  呼叫前面的引數—第乙個分組(也就是括號裡的引數)

如果用擴充套件正則則不需要 \ 來進行轉義

過濾出一行中有兩個相同數字的行

# grep "\([0-9]\).*\1"  /etc/passwd

過濾出行首和行位字母相同的行

# grep "^\([a-z]\).*\1$" /etc/passwd

a?表示前乙個引數0個或1個

+a+表示前乙個引數1個或多個

|(a|b)表示或的關係,a、b

shell指令碼 正規表示式

一 正規表示式 正規表示式是用來描述字串排列和匹配模式的一種語法規則,是字串的模式分割 匹配 查詢和替換操作。正規表示式是包含匹配,操作字串,如grep,awd,sed,而萬用字元是完全匹配,如ls,find,cp 正則的與萬用字元的不同,如正規表示式aa 第二個a不起作用,意思是以a開頭的,而萬用...

shell 指令碼 正規表示式

字元類 character class 如上例的x和 y,它們在模式中表示乙個字元 但是取值範圍是 一類字 符中的任意乙個。數量限定符 quantifier 郵件位址的每一部分可以有乙個或多個x字元 ip位址的每一部 分 可以有1 3個y 字元位置限定符 anchor 部分,用普通字元 和 隔 開 ...

shell指令碼之正規表示式

一 基礎正規表示式例項 元字元總結 在linux系統中常見的檔案處理工具中grep和sed支援基礎正規表示式。grep命令選項 i 查詢時不區分大小寫 v 查詢時反向輸出,如查詢不包含某些字元的內容 n 表示查詢出結果後顯示行號 這三個選項可以結合使用,如 in 查詢時不區分大小寫並顯示行號。示例 ...