grep工具

正則

正則是一串有規律的字符串, 在計算機科學中,是指一個用來描述或者匹配一系列符合某個句法規則的字符串的單個字符串。在不少文本編輯器或其餘工具裏,正則表達式一般被用來檢索和/或替換那些符合某個模式的文本內容。許多程序設計語言都支持利用正則表達式進行字符串操做。linux

正則表達式的基礎

在最簡單的狀況下,一個正則表達式看上去就是一個普通的查找串。如:正則表達式"test"中沒有包含任何元字符,它能夠匹配"test"和"007test007"等字符串,可是不能匹配"Test"。正則表達式

 

要想真正的用好正則表達式,須要正確的理解元字符。編輯器

元字符

Ø  . :匹配任何單個字符。例如正則表達式 r.t 匹配這些字符串:rat、rut、r t,可是不匹配root。工具

Ø  $ :匹配行結束符。例如正則表達式 weasel$ 可以匹配字符串"He's a weasel"的末尾,可是不能匹配字符串"They are a bunch of weasels."。spa

Ø  ^ :匹配一行的開始。例如正則表達式 ^When in 可以匹配字符串"When in the course of human events"的開始,可是不能匹配"What and When in the"。命令行

Ø  *:匹配0個或多個正好在它以前的那個字符。如,正則表達式 .* 意味着可以匹配任意數量的任何字符(表明全部內容)。設計

Ø  " \ ":脫義符,使這裏列出的這些元字符以普通的字符的身份來進行匹配。如,\ . 是匹配點字符,而不是以通配符的身份出現。遞歸

Ø  [ ]:匹配括號中的任何一個字符。如,正則表達式 r[aeo]d 匹配rad,red,rod。也能夠指定區間 [0-9a-zA-Z],即表明全部非特殊字符!字符串

Ø  \ <,\ >:匹配詞(word)的開始(\ <)和結束(\ >)。例如正則表達式 \ < the 可以匹配字符串"for the wise"中的"the",可是不能匹配字符串"otherwise"中的"the"。 注意: 這個元字符不是全部的軟件都支持的。io

Ø  |:將兩個匹配條件進行邏輯「或」(Or)運算。 注意: 這個元字符不是全部的軟件都支持的。

Ø  +:匹配1或多個正好在它以前的那個字符。注意: 這個元字符不是全部的軟件都支持的。

Ø  ?:匹配0或1個正好在它以前的那個字符。注意: 這個元字符不是全部的軟件都支持的。

Ø  \ {i\ }\ {i,j\ }: 匹配指定數目的字符,這些字符是在它以前的表達式定義的。例如正則表達式A[0-9]\ {3\ } 可以匹配字符"A"後面跟着正好3個數字字符的串,例如A12三、A348等,可是不匹配A1234。而正則表達式[0-9]\ {4,6\ } 匹配連續的任意4個、5個或者6個數字字符。注意: 這個元字符不是全部的軟件都支持的。

grep

grep (縮寫來自Globally search a Regular Expression and Print)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。Unix的grep家族包括grep、egrep和fgrep,egrep和fgrep的命令都是grep的擴展,支持更多的re元字符,fgrep就是fixed grep或fast grep,它們把全部的字母都看做單詞,也就是說,正則表達式中的元字符表示回其自身的字面意義,再也不特殊。linux使用GNU版本的grep。它功能更強,能夠經過-G、-E、-F命令行選項來使用egrep和fgrep的功能。

語法: grep [options] ‘Word’ filename
Options:
-c:=count 打印符合要求的行數
-i:=ignore-case 不區分大小寫
-n:=line-number 在輸出符合要求的行的同時連同行號一塊兒輸出
-v:=revert-match 打印不符合要求的行(取反)
-r,-R:=recursive(遞歸的,循環的)讀取目錄下的全部文件,包括子目錄
-A:後面跟數字(有無空格均可以),過濾出複合要求的行以及下面n行, 例如 –A2則表示打印符合要求的行以及下面兩行
-B:同上,過濾出符合要求的行以及上面n行

-C:同上,同時過濾出符合要求的行以及上下各n行
-E:‘grep -E’ = egrep

過濾一個字符串

在Linux中,grep默認帶color選項:

grep -c

grep -n

grep -i

grep -v

grep -r/R

grep -A

grep -B

grep -C

grep應用

grep -n '[0-9]'

grep -nv '[0-9]'

grep -n ' ^# ' 過濾以#開頭的行(^在此表示以某字符開頭)

grep '[^0-9]' 表示非0-9中任意字符所在的行,即任意非數字所在的行(只要包含非數字字符都算在內,中括號內的‘^’表示否認)

grep '^[^0-9]' 表示以非數字字符開頭的行

grep 'r.o' 在此‘.’表示一個任意字符

grep 'o*o' 在此‘ * ’表示其左邊的字符重複n次(n≥0),後面結尾,o=0 ,*=0,001

grep '.*' 在此' . * '組合表示全部任意字符

grep 'o\ {2\ }' 在此{}表示前面字符或字符串出現的次數(也能夠是一個區間,如'o\ {0,3\ }'表示0個到3個o)

egrep應用

egrep 'o{2}'=grep -E 'o {2}' = grep 'o\ {2\ }'

egrep -n 'o+o' 在此‘+’表示其左邊的字符重複n次(n≥1,注意和*的區別)

egrep -n 'o?t' 在此?表示其前面的字符出現0次或1次

egrep -n 'root|nologin' 在此‘|’表示或者

grep -nE '(oo){2}' 在此()內的內容表示一個字符組合,即連續出現兩次‘oo’=‘oooo’字符串

相關文章
相關標籤/搜索