正規表示式分為基礎正則和擴充套件正則,都是為了匹配符合預期要求的字串
只需要記住,對檔案內容或是展示文字的操作都是正則,而對目錄或檔名的操作則都是萬用字元(例如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 查詢時不區分大小寫並顯示行號。示例 ...