以前學習find命令時,就已經接觸過一些簡單的正則,那麼咱們如今來學習一些複雜的正則。首先,咱們仍是來複習什麼是正則表達式,看這個教程先,必定要多看幾遍,至少知道正則大概長什麼樣子。(轉載至https://deerchao.net/tutorials/regex/regex.htm )正則就是有規律的一串字符串,用來描述一個特定的內容,正則適合用來處理字符串,不太適合處理數學邏輯。學好正則對編寫shell腳本有很大的好處,全部的shell腳本大部分都涉及到正則表達式。各類編程工具中也須要使用正則。php
用grep sed awk去處理字符串
能不能寫好shell腳本php
ngix配置文件中也有正則
正則核心符號
。一個任意字符正則表達式
用於過濾文件中的字符,(global search regular expression(RE) and print out the line,全面搜索正則表達式並把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。系統自己經過/etc/profile.d目錄下的colorgrep.sh文件作了別名==grep --color,可以方便的顯示找到的行。
用法: grep [選項]... PATTERN [FILE]...
grep -cniv ‘關鍵字(正則)’ 文件路徑
選項
-i 不區分大小寫,默認狀況下grep不區分關鍵字大小寫
-c 行數
-n 顯示關鍵詞所在行號
-v取反(使用較多)
-r 遍歷全部層級子目錄
-A後面跟數字,過濾出符合要求的行以及下面的n行
-B後面跟數字,過濾符合要求的行以及上面的n行
-C後面跟數字,過濾符合要求的行以及上下各n行shell
擴展正則 grep -E ==sed -r ==awkexpress
反覆練習,掌握正則表達式
首先作個準備工做,把/etc/passwd文檔拷貝到其餘路徑下,如/tmp下作試驗編程
一、過濾出關鍵字root所在的行並顯示行號。ssh
grep -n 'root' /etc/passwdide
能夠看到有顏色標識關鍵字。工具
二、統計某一關鍵字出現的行數學習
grep -c 'nologin' passwd.net
下面那個15就是說nologin這個關鍵字出現了15次
三、搜索某一關鍵字出現的行,而後把沒有出現關鍵字的行過濾出來
grep -vn 'nologin' passwd
四、搜索整個文件夾,在文件內容中招root。(注意與find命令找到的東西的區別)
grep -r 'root' /etc
紫色是文件的路徑,搜索出來的東西不少,grep把/etc下全部包含root的文件中的root字所在的行和所在的文件信息都列了出來。
五、-ABC 做用演示,能列出關鍵字所在的行和臨近的行。
grep -A2 'root' passwd
grep -B2 'root' passwd
grep -C2 'root' passwd
-C選項會把搜到的行的附近的行都列出來,固然若是搜索的目標在頭上或者文尾,就不會列相應的行。
命令寫法:grep -(cirvnABC) 'regexp' 文件或目錄路徑
精髓在regexp的寫法,如何正確的把想要的東西用正則表達出來。
一、把含有0到9十個數字任意一個字符的行列出來
grep '[0-9]' passwd
取反再搜索下
沒了,說明passwd文件中每一行都帶有數字
這裏說明[0-9]==[0123456789]
二、把不以#號開頭的行打印出來,
這條命令常常用於查看程序或者系統的配置文件,這種文件常常有大段的以'#'開頭的註釋行,直接看很麻煩。
grep -vn '^#' /etc/ssh/sshd_config
仍是有空行,咱們要再把空行過濾掉。
grep -vn '^#' /etc/ssh/sshd_config|grep -v '^$'
三、顯示test.txt文檔中含有r.o關鍵字的行
grep 'r.o' test.txt
.號表示任意一個字符,a-z,A-Z,0-9,特殊號等等。
四、搜索test.txt中形如'r*o'的行
grep 'r*o' test.txt
注意這個正則的匹配結果,「r*o」能夠表明的東西是隻要以零個或任意多個r開頭o結尾的字符,ro確定能夠,o也能夠由於他表示0個r和1個o,rrro,rro這些確定能夠。