天天看點

Linux shell基礎(四)正規表達式與grep指令 beta一、正規表達式二、grep指令

用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
Linux shell基礎(四)正規表達式與grep指令 beta一、正規表達式二、grep指令

可以看到有顔色辨別關鍵字。

2、統計某一關鍵字出現的行數

grep -c 'nologin' passwd
Linux shell基礎(四)正規表達式與grep指令 beta一、正規表達式二、grep指令

下面那個15就是說nologin這個關鍵字出現了15次

3、搜尋某一關鍵字出現的行,然後把沒有出現關鍵字的行過濾出來

grep -vn 'nologin' passwd
Linux shell基礎(四)正規表達式與grep指令 beta一、正規表達式二、grep指令

4、搜尋整個檔案夾,在檔案内容中招root。(注意與find指令找到的東西的差別)

grep -r 'root' /etc
Linux shell基礎(四)正規表達式與grep指令 beta一、正規表達式二、grep指令

紫色是檔案的路徑,搜尋出來的東西很多,grep把/etc下所有包含root的檔案中的root字所在的行和所在的檔案資訊都列了出來。

5、-ABC 作用示範,能列出關鍵字所在的行和臨近的行。

grep -A2 'root' passwd grep -B2 'root' passwd grep -C2 'root' passwd
Linux shell基礎(四)正規表達式與grep指令 beta一、正規表達式二、grep指令
Linux shell基礎(四)正規表達式與grep指令 beta一、正規表達式二、grep指令
Linux shell基礎(四)正規表達式與grep指令 beta一、正規表達式二、grep指令

-C選項會把搜到的行的附近的行都列出來,當然如果搜尋的目标在頭上或者文尾,就不會列相應的行。

指令寫法:grep -(cirvnABC) 'regexp' 檔案或目錄路徑

精髓在regexp的寫法,如何正确的把想要的東西用正則表達出來。

1、把含有0到9十個數字任意一個字元的行列出來

grep '[0-9]' passwd
Linux shell基礎(四)正規表達式與grep指令 beta一、正規表達式二、grep指令

取反再搜尋下

沒了,說明passwd檔案中每一行都帶有數字

Linux shell基礎(四)正規表達式與grep指令 beta一、正規表達式二、grep指令

這裡說明[0-9]==[0123456789]

2、把不以#号開頭的行列印出來,

這條指令經常用于檢視程式或者系統的配置檔案,這種檔案經常有大段的以'#'開頭的注釋行,直接看很麻煩。

grep -vn '^#' /etc/ssh/sshd_config
Linux shell基礎(四)正規表達式與grep指令 beta一、正規表達式二、grep指令

還是有空行,我們要再把空行過濾掉。

grep -vn '^#' /etc/ssh/sshd_config|grep -v '^$'

3、顯示test.txt文檔中含有r.o關鍵字的行

grep 'r.o' test.txt
Linux shell基礎(四)正規表達式與grep指令 beta一、正規表達式二、grep指令

.号表示任意一個字元,a-z,A-Z,0-9,特殊号等等。

4、搜尋test.txt中形如'r*o'的行

grep 'r*o' test.txt
Linux shell基礎(四)正規表達式與grep指令 beta一、正規表達式二、grep指令

注意這個正則的比對結果,“r*o”可以代表的東西是隻要以零個或任意多個r開頭o結尾的字元,ro肯定可以,o也可以因為他表示0個r和1個o,rrro,rro這些肯定可以。

 本文轉自 whytl 51CTO部落格,原文連結:http://blog.51cto.com/11934539/2061342

繼續閱讀