天天看點

Grep指令及正規表達式

grep:

grep英文全名: Global search REgular expression and Print out the line.

作用:文本搜尋工具,根據使用者指定的"模式(pattern)"逐行去搜尋目标文本,列印比對到的行;

模式:由正規表達式的元字元及文本字元所編寫的過濾條件;

元字元:字元不表示其字面意義,而用于表示通配或控制功能;

Grep指令分為分兩類:

基本正規表達式:BRE

擴充正規表達式:ERE

指令格式

grep [OPTIONS] PATTERN [FILE...]:

選項:

--color=auto:對比對到的串做高亮顯示;

-v:顯示模式比對不到行;

-i: 忽略字元大小寫;

-o: 僅顯示能夠被模式比對到的串本行;

-q: 靜默模式;

-E:使用擴充的正規表達式;

基本正規表達式的元字元:

字元比對:

.: 比對任意單個字元;

[]:比對指定範圍内的任意單個字元;

[^]:比對指定範圍内的任意單個字元;

字元集合:

[:lower:]:小寫字母

[:upper:]:大寫字母

[:alnum:]:字母數字字元。在 ASCII 中,等價于:[A-Z,a-z,0-9]

[:digit:]:數字0-9

[:space:]:空白字元,包括空格,tab,回車,換行,vertical tab, 和 form feed.在 ASCII 中, 等價于:[ \t\r\n\v\f]

[:punct:]:标點符号字元

[:alpha:]:字母字元。在 ASCII 中,等價于:[A-Za-z]

示例:顯示passwd中r+字母+字母+t 的行

Grep指令及正規表達式

次數比對元字元:用于要指定其次數的字元的後面;

*: 前面字元出現任意次;

示例:建立grep.txt内容為,

abxy

xay

xxxxxxxy

顯示任意個"x"+"y"的行。

Grep指令及正規表達式

\?:0或1次;

Grep指令及正規表達式

\+:1或多次;

Grep指令及正規表達式

\{m\}:精确限制為m次;

Grep指令及正規表達式

\{m,n\}: 至少m次,至多n次,[m,n]

\{0,n\}:至多n次;

\{m,\}:至少m次;

Grep指令及正規表達式

.*: 比對任意長度的任意字元;

位置錨定:

^: 行首錨定;用于模式的最左側;

Grep指令及正規表達式

$: 行尾錨定;用于模式的最右側;

\<, \b: 詞首錨定;用于表示單詞的模式的左側;

\>, \b:詞尾錨定;用于表示單詞的模式的右側;

Grep指令及正規表達式

\<,\>同時使用,r開頭,t結尾

Grep指令及正規表達式

^$: 空白行;

分組:\(\)

分組的小括号中的模式比對到的内容,會在執行過程中被正規表達式引擎記錄下來,并儲存内置的變量中;這些變量分别是\1, \2, ...

\1: 從左側起,第一個左括号,以及與之配對的右括号中間的模式所比對到的内容;

\2:

...

後向引用:使用變量引用前面的分組括号中的模式所比對到的字元;

Grep指令及正規表達式

練習:

1、顯示/etc/passwd檔案中以bash結尾的行;

Grep指令及正規表達式

2、顯示/etc/passwd檔案中的兩位數或三位數;

Grep指令及正規表達式

3、顯示'netstat -tan'指令結果中以'LISTEN'後跟0個、1個或多個空白字元結尾的行;

Grep指令及正規表達式

4、添加使用者bash,testbash, basher以及nologin使用者(nologin使用者的shell為/sbin/nologin);而後找出/etc/passwd檔案中使用者名同shell名的行;

Grep指令及正規表達式

擴充的正規表達式:

grep家庭有三個指令:

grep:基本正規表達式

-E: 擴充正規表達式

-F:不支援正規表達式

egrep:擴充正規表達式

fgrep:不支援正規表達式

擴充正規表達式的元字元:

.: 任意單個字元

[]:制定範圍

[^]:範圍以外

次數比對:

*:任意長度的任意字元

?: 0次或1次;

+: 1次以上;

{m}: 精确比對m次;

{m,n}: 至少m次,至多n次;

錨定:

^: 錨定行首

$: 錨定行尾

\<, \b:錨定詞首

\>, \b:錨定詞尾

分組:()

後向引用:\1, \2, ...

或者:

a|b

C|cat: 不表示Cat或cat,而表示C或cat;

要寫成(C|c)at,才表示Cat或cat;

1、顯示目前系統上root、centos或user1使用者的預設的shell和UID;

Grep指令及正規表達式

2、找出/etc/rc.d/init.d/functions檔案中某單詞(單詞中間可以存在下劃線)後面跟着一組小括号的行;

Grep指令及正規表達式

3、使用echo輸出一個路徑,而後egrep找出其路徑基名;

Grep指令及正規表達式

進一步地:使用egrep取出其目錄名;

繼續閱讀