<a href="https://s4.51cto.com/wyfs02/M01/A7/3D/wKioL1nkIWbhuIF_AAt86H5NvSE672.png" target="_blank"></a>
正則就是各種各樣的字元組合在一起形成的一串有規律的字元串,程式設計語言、shell腳本都需要用到正規表達式,可以利用正則來完成一些複雜的需求。
學習正則需要用到四個工具grep、egrep、sed、awk,其中egrep是grep的擴充,這倆者通常被歸類為同一個工具。學好正則對編寫shell腳本有很大的幫助。
<a href="https://s4.51cto.com/wyfs02/M01/08/8D/wKiom1nkJCGyswIwAAmkF7sLtA8894.png" target="_blank"></a>
grep最簡單的用法就是後面加一個字元串,然後比對含有這個字元串的行:
<a href="https://s2.51cto.com/wyfs02/M00/08/8D/wKiom1nkJCWiAQsGAAdjX4TX9WQ970.png" target="_blank"></a>
在CentOS7中grep自帶了--color=auto選項:
<a href="https://s4.51cto.com/wyfs02/M02/A7/3D/wKioL1nkIW-g0Sj-AAFq6JZff5o177.png" target="_blank"></a>
-c選項檢視行數:
<a href="https://s3.51cto.com/wyfs02/M00/A7/3D/wKioL1nkIXCyUJMyAAGOZxAA378830.png" target="_blank"></a>
-n選項顯示行号:
<a href="https://s3.51cto.com/wyfs02/M02/08/8D/wKiom1nkJCmyQSH6AAdjX10gYOU647.png" target="_blank"></a>
-i選項不區分大小寫檢視:
<a href="https://s4.51cto.com/wyfs02/M01/08/8D/wKiom1nkJCzCoM96AAexbaL8BY4018.png" target="_blank"></a>
-v選項是取反:
<a href="https://s1.51cto.com/wyfs02/M00/A7/3D/wKioL1nkIZGBd7N1AAO_mqtz-IE181.png" target="_blank"></a>
-r選項把一些子目錄下面的檔案進行周遊:
<a href="https://s3.51cto.com/wyfs02/M02/A7/3D/wKioL1nkIZaSu7EnAAy1M2SHAH0328.png" target="_blank"></a>
把root目錄下含有root字元串的檔案都列出來了
-A選項後面跟數字就會列出指定字元所在行下的n行:
<a href="https://s5.51cto.com/wyfs02/M02/08/8D/wKiom1nkJE_BxzR2AAUNqPUmImM599.png" target="_blank"></a>
-B選項則是相反,列出指定字元所在行上的n行:
<a href="https://s5.51cto.com/wyfs02/M01/A7/3D/wKioL1nkIZqgUku_AAL0GPCz3JQ419.png" target="_blank"></a>
-C選項是列出指定字元所在行上下n行:
<a href="https://s2.51cto.com/wyfs02/M01/08/8D/wKiom1nkJFHAWvJMAAQYzkqKGfI402.png" target="_blank"></a>
<a href="https://s2.51cto.com/wyfs02/M00/A7/3D/wKioL1nkIaTQ_dVlABLsCl5bKdY182.png" target="_blank"></a>
<a href="https://s2.51cto.com/wyfs02/M00/A7/3D/wKioL1nkIamCSXWtAAhwQIpWZxA775.png" target="_blank"></a>
要注意的是所謂0-9不是說0到9的基數的意思,是指包含0-9的字元串,比如956包含了9、5、6這三個字元,就會被列出來。
加-v選項就是顯示不包含0-9的行,也可以了解為把不包含數字的行列出來:
<a href="https://s5.51cto.com/wyfs02/M01/A7/3D/wKioL1nkIeXRDe5lAAGID101a4M399.png" target="_blank"></a>
^#表示列出以#号開頭的行,是以^就是表示某個字元開頭的行:
<a href="https://s5.51cto.com/wyfs02/M00/08/8E/wKiom1nkJJ7x1MyqAAdsCAF5oVQ480.png" target="_blank"></a>
加-v選項就可以過濾掉#号開頭的行:
<a href="https://s4.51cto.com/wyfs02/M00/A7/3D/wKioL1nkIemDfXf2AAE_LwoFG_s064.png" target="_blank"></a>
[^0-9]表示非0-9,會把内容列出來然後0-9之外的字元都會顯示顔色:
<a href="https://s3.51cto.com/wyfs02/M02/A7/3D/wKioL1nkIjOgg5G0AAibmbU4vKQ120.png" target="_blank"></a>
. 表示比對任意的單個字元的行:
<a href="https://s1.51cto.com/wyfs02/M02/08/8E/wKiom1nkJOnRTc0PAAKt_q7Xl-g372.png" target="_blank"></a>
* 則表示比對任意個字元的行:
<a href="https://s3.51cto.com/wyfs02/M01/08/8E/wKiom1nkJKiy6fWkAAjyXHexnQM244.png" target="_blank"></a>
.* 貪婪比對,會比對所有的,類似于通配:
<a href="https://s2.51cto.com/wyfs02/M02/08/8E/wKiom1nkJQvytIfYAApErp5X0-w894.png" target="_blank"></a>
{}可以用數字指定前面那個字元的重複範圍,但是要加上脫義符:
<a href="https://s2.51cto.com/wyfs02/M00/08/8E/wKiom1nkJZnx2XrmAAPl7YKE1zI324.png" target="_blank"></a>
如果不想寫脫義符可以加個-E選項或者使用egrep:
<a href="https://s1.51cto.com/wyfs02/M02/A7/3D/wKioL1nkIuWidWlrAALQJL3q5jI177.png" target="_blank"></a>
<a href="https://s2.51cto.com/wyfs02/M02/A7/3D/wKioL1nkIuWTeWfYAAMR4d5JTkE800.png" target="_blank"></a>
+和*有點相似,表示比對字元出現1次上的行,而*号則是0次也算,使用+需要加上脫義符,不想使用脫義符就用egrep:
<a href="https://s5.51cto.com/wyfs02/M01/08/8E/wKiom1nkJZzTsPUvAALUsasQGTU274.png" target="_blank"></a>
?表示字元重複次數為0或1:
<a href="https://s3.51cto.com/wyfs02/M01/08/8E/wKiom1nkJaCRKrTEAAkmb-9EI_8569.png" target="_blank"></a>
| 是或者的意思:
<a href="https://s5.51cto.com/wyfs02/M00/A7/3D/wKioL1nkIu3DyYhDAAeOuC9hfFY480.png" target="_blank"></a>
()是表示組合的意思:
<a href="https://s4.51cto.com/wyfs02/M00/A7/3D/wKioL1nkIu7wo4p0AARiXjv9-RY924.png" target="_blank"></a>
擴充
把一個目錄下,過濾所有*.php文檔中含有eval的行
grep -r --include="*.php" 'eval' /data/
本文轉自 ZeroOne01 51CTO部落格,原文連結:http://blog.51cto.com/zero01/1972729,如需轉載請自行聯系原作者