用grep sed awk去處理字元串
能不能寫好shell腳本php
ngix配置檔案中也有正則
正則核心符号
。一個任意字元
個*
? 零個或1個
一個或多個
^ 開頭
# 末尾
用法: grep [選項]... PATTERN [FILE]...
grep -cniv ‘關鍵字(正則)’ 檔案路徑
選項
-i 不區分大小寫,預設情況下grep不區分關鍵字大小寫
-c 行數
-n 顯示關鍵詞所在行号
-v取反(使用較多)
-r 周遊所有層級子目錄
-A後面跟數字,過濾出符合要求的行以及下面的n行
-B後面跟數字,過濾符合要求的行以及上面的n行
-C後面跟數字,過濾符合要求的行以及上下各n行
擴充正則 grep -E ==sed -r ==awk
反複練習,掌握正規表達式
首先做個準備工作,把/etc/passwd文檔拷貝到其他路徑下,如/tmp下做試驗
1、過濾出關鍵字root所在的行并顯示行号。
grep -n 'root' /etc/passwd

可以看到有顔色辨別關鍵字。
2、統計某一關鍵字出現的行數
grep -c 'nologin' passwd
下面那個15就是說nologin這個關鍵字出現了15次
3、搜尋某一關鍵字出現的行,然後把沒有出現關鍵字的行過濾出來
grep -vn 'nologin' passwd
4、搜尋整個檔案夾,在檔案内容中招root。(注意與find指令找到的東西的差別)
grep -r 'root' /etc
紫色是檔案的路徑,搜尋出來的東西很多,grep把/etc下所有包含root的檔案中的root字所在的行和所在的檔案資訊都列了出來。
5、-ABC 作用示範,能列出關鍵字所在的行和臨近的行。
grep -A2 'root' passwd grep -B2 'root' passwd grep -C2 'root' passwd
-C選項會把搜到的行的附近的行都列出來,當然如果搜尋的目标在頭上或者文尾,就不會列相應的行。
指令寫法:grep -(cirvnABC) 'regexp' 檔案或目錄路徑
精髓在regexp的寫法,如何正确的把想要的東西用正則表達出來。
1、把含有0到9十個數字任意一個字元的行列出來
grep '[0-9]' passwd
取反再搜尋下
沒了,說明passwd檔案中每一行都帶有數字
這裡說明[0-9]==[0123456789]
2、把不以#号開頭的行列印出來,
這條指令經常用于檢視程式或者系統的配置檔案,這種檔案經常有大段的以'#'開頭的注釋行,直接看很麻煩。
grep -vn '^#' /etc/ssh/sshd_config
還是有空行,我們要再把空行過濾掉。
grep -vn '^#' /etc/ssh/sshd_config|grep -v '^$'
3、顯示test.txt文檔中含有r.o關鍵字的行
grep 'r.o' test.txt
.号表示任意一個字元,a-z,A-Z,0-9,特殊号等等。
4、搜尋test.txt中形如'r*o'的行
grep 'r*o' test.txt
注意這個正則的比對結果,“r*o”可以代表的東西是隻要以零個或任意多個r開頭o結尾的字元,ro肯定可以,o也可以因為他表示0個r和1個o,rrro,rro這些肯定可以。
本文轉自 whytl 51CTO部落格,原文連結:http://blog.51cto.com/11934539/2061342