正則表達式
概念
- REGEXP : 由一類特殊字符及文本字符所編寫的模式学密,其中有些字符(元字符) 不表示字符表面意思弥雹,而表示控制或通配的功能鹦筹。
- 支持正則表示式的程序:grep秋秤,sed介衔,awk恨胚,vim,less夜牡,nginx与纽,varnish
-分兩類:基本正則表達式: BRE
擴展正則表達式: ERE
grep -E ,egrep
grep -F,fgrep
- 元字符分類:字符匹配、匹配次數(shù)塘装、位置錨定急迂、分組
基本正則表達式元字符
字符匹配
** . ** 匹配任意單個字符,如:表示r和t之前任意兩個字符
Paste_Image.png[ ] 匹配指定字符中的任意一個蹦肴,如: 將行中存在a僚碎,z,x其中任意一個字母的行篩選出來
Paste_Image.png[^] 匹配指定字符串中的任意其他字符阴幌,如匹配ar和dr以外的所有字符
Paste_Image.png- 元字符
- [:alnum:] 字母和數(shù)字勺阐,等價于=0-9a-zA-Z ,[[:alnum:]] =[0-9a-zA-Z]
- [:alpha:] 任何英文大小寫字母卷中,等價于a-zA-Z,[[:alpha:]]=[a-zA-Z]
- [:upper:] 大寫英文字母
- [:lower:] 小寫英文字母
- [:blank:] 空白字符(空格和制表符)
- [:space:] 水平和垂直的空白字符(比[:blank:]表示范圍廣)
- [:cntrl:] 不可打印的控制字符(退格阱表、刪除塘秦、警鈴....)
- [:digit:] 十進制數(shù) , [:xdigit:]十六進制數(shù)
- [:graph:] 可打印的非空白字符
[:print:] 可打印字符
- [:punct:] 標點符號
匹配次數(shù)
- 匹配次數(shù):用于要指定次數(shù)的字符后面溉跃,用于置頂前面的那個字符要出現(xiàn)的次數(shù)
-
* 表示前面的那個字符出現(xiàn)0-多次懒闷,如:
Paste_Image.png -
.*表示任意字符出現(xiàn)0-多次十减,如
Paste_Image.png -
? 表示前面的那個字符出現(xiàn)0次或者一次,如:
Paste_Image.png - + 表示前面的字符出現(xiàn)一次以上愤估,至少一次帮辟,如:
-
Paste_Image.png
- \ {\} 用于表示前面字符出現(xiàn)的精確次數(shù),或者某個范圍玩焰,最少幾次由驹,最多幾次。如:
Paste_Image.png
- 位置錨定
-
^ 表示以什么字符開頭的行昔园,如:
Paste_Image.png -
$ 行尾匹配蔓榄,用于界定模式的最右邊,如:匹配以bash結(jié)尾的行
Paste_Image.png -
^$ ,用于界定一行的內(nèi)容蒿赢,如润樱,去掉所有的空白字符,包括空格羡棵,tab壹若,回車等等,后面一個只能去掉空行皂冰。
Paste_Image.png
-
去掉空行的寫法
-
\< 進行單詞的左邊錨定店展,明白單詞的一般組成,字母數(shù)字下劃線秃流,漢字赂蕴,例如:
Paste_Image.png
其余特殊字符不算單詞的一部分
-
/> 單詞的游邊界,相當于從右邊開始匹配單詞舶胀,如
-
/< >界定一個完整的單詞表達,如:這種情況可以達到一種精確的單詞匹配概说,當然中間可以使用通配符。
中間可以使用通配符
- \b 同<,<>等價于=\b.. \b
分組
- () 將多個字符捆綁在一起嚣伐,當做一個整體進行處理糖赔,如:這里匹配的是ro這個字符串。
-
后向引用 分組括號里面的模式匹配到的內(nèi)容會被存儲到內(nèi)部變量里面轩端,分別被命名為\1放典,\2.....。需要注意一點這些變量里面存儲的值是模式匹配到的符合條件的值。例如:
Paste_Image.png | 或奋构,前后兩個模式條件壳影,符合其中一個即可,如:
Paste_Image.png
** 注 ** 寫正則表達式的時候弥臼,避免出現(xiàn)問題宴咧,最好加上雙引號
以上例子,變紅的內(nèi)容是符合條件的醋火,如果不想未匹配的內(nèi)容出現(xiàn)悠汽,加上-o參數(shù)即可
擴展正則表達式和基本正則表達式
- 基本一致
- 不同
- 用egrep 或者 grep -E
- ?,+,{},(),| 使用的時候不用加斜線(/)