grep (縮寫來自Globally search a Regular Expression and Print)是一種強大的文本搜索工具,它能使用特定模式匹配(包括正則表達式)搜索文本,并默認輸出匹配行。Grep在實際中對于我們的工作有著很大的作用,用于對文件的搜索,通過由正則表達式字符以及文本字符所編寫的過濾條件來獲取我們想要查找的行或關鍵信息。
Grep語法
grep
[OPTIONS] PATTERN [FILE…]
-n :顯示行號
-i :忽略字符的大小寫
-o :僅顯示匹配到得字符串
-e :指定多個匹配條件(或的關系)
-c :顯示統計到的行數 類似于 wc -l 的功能
-v :取反功能,匹配出不包含“PATTERN”的行
-q :靜默輸出,不輸出任何信息,只關心執行結果
-A # :after,匹配到的行的后#行
-B # : before,匹配到的行前#行
-C # :context,匹配到得行前后各#行
-E :==egrep 支持擴展的正則表達式 -F :==fgrep,快速搜索
而且egrep和fgrep的命令只跟grep有很小不同。egrep和fgrep都是grep的擴展,支持更多的re元字符,fgrep就是fixed
grep或fast grep,它們把所有的字母都看作單詞,也就是說,正則表達式中的元字符表示回其自身的字面意義,不再特殊。linux使用GNU版本的grep。它功能更強,可以通過-E、-F命令行選項來使用egrep和fgrep的功能。
grep的工作方式是這樣的,它在一個或多個文件中搜索字符串模板。如果模板包括空格,則必須被引用,模板后的所有字符串被看作文件名。搜索的結果被送到屏幕,不影響原文件內容。
grep可用于shell腳本,因為grep通過返回一個狀態值來說明搜索的狀態,如果模板搜索成功,則返回0,如果搜索不成功,則返回1,如果搜索的文件不存在,則返回2。我們利用這些返回值就可進行一些自動化的文本處理工作。
Grep命令中允許指定的串語句是一個規則表達式,這是一種允許使用某些特殊鍵盤字符的指定字符串的方法,這種方法中的特殊鍵盤字符可以用于代表其他字符也可以進一步定義模式匹配工作方式。例如:grep “.*hood” essay1。該命令將在文件essay1中搜索,顯示出包含帶有字符串hood的字的每一行。命令行中的點表示的是hood之前可以有任意字符,星號指的是在字符串之前點號所表示的任意字符可以有任意個(其中的雙引號是可有可無的,但是當語句中包含短語或者空格時就必須加雙引號)
正則表達式分為兩類:
基本正則表達式:BRE
擴展正則表達式:ERE
基本正則表達式
字符匹配
. :匹配任意單個字符;
[ ] :匹配指定范圍內的任意單個字符;
有以下幾種表示方法:
[:digit:] :表示所有數字;
[:upper:]: 表示所有大寫字母;
[:lower:]:表示所有小寫字母;
[:alpha:]:表示所有的字母;
[:alnum:]:表示所有的字母和數字;
[:punct:]:表示所有的標點符號;
[:space:]:表示所有的空白字符;
[1-9]:表示1到9的數字,包括1和9;
[a-z]:表示為 a A b B c C … z Z中任意一個字母。
[^] : 匹配除指定范圍內的任意單個字符;例如:[^zhang]:表示除z,h,a,n,g之外的字母
次數匹配
*:表示匹配前面的字符任意次;(貪婪模式,能匹配多少就匹配多少)
例如:grep “x*y” ———可以是xay,xcsy,也可以是x2aty,但是x不可以,y不可以。
.* : 表示任意長度的任意字符;
\?: 表示匹配前面的字符0或1次,即可有可無;
\+: 匹配前面的字符至少一次;
\{m\}: 匹配前面的字符m次;
\{m,n\}: 匹配前面的字符至少m次,最多n次;
\{m,\}:匹配前面的字符至少m次;
\{0,n\}: 匹配前面的字符最多n次。
位置錨定
對特定位置進行定位
^
: 行首錨定; $: 行尾錨定;—— ^$ 表示匹配空白行(不包含空格);^[[:space:]]$ 包含空格的空行。
\<或\b :詞首錨定; \>或\b :詞尾錨定 —— 例如:\<PATTERN\> 匹配整個單詞
分組
分組是將多個字符捆綁在一起,當做一個整體進行處理:\( \) 例如:\(xy\)* 表示xy這個整體可以出現任意次 ,后邊用\1,\2..來分別表示之前從左邊開始括起來的每一組
示例:
1、顯示/proc/meminfo文件中以s(不區分大小寫)開頭的行
2、顯示/etc/passwd文件中其默認shell不是/sbin/nologin的用戶
3、找出/etc/passwd文件中的一位數或兩位數
4、顯示/etc/rc.d/rc.sysinit文件中,以#開頭,后面至少跟一個空白字符,而又至少一個空白字符的行
5、找出當前系統上用戶ID和屬組ID相同的用戶
擴展正則表達式
grep
–e ‘PATTERN’ FILE…
egrep
‘PATTERN’ FILE…
字符匹配、字符錨定與基本正則相同;
次數匹配
?:表示0或1次;
+:至少一次;
{m}:精確匹配m次;
{n,m}:至少m次,最多n次;
{0,m}:最多m次;{n,}:至少n次。
其他與基本相同
或者
a|b
分組:()括號無需轉義。
示例:
找出ifconfig命令結果中1-255之間的數字
原創文章,作者:Immortals、zcy,如若轉載,請注明出處:http://www.www58058.com/73360
主要介紹了grep命令的詳細用法及示例說明,內容總結的很詳細,排版也很好。繼續努力 !