grep與egrep用法從基礎到高階高階

2021-09-21 10:10:51 字數 4533 閱讀 2293

一、grep

國際音標[grep]

grep是shell指令碼中的文字搜尋工具,根據使用者指定的文字模式對目標檔案進行逐行搜尋,顯示能被模式所匹配到的行。

格式:grep [options] 'pattern' file,...

常用選項:

-v:反向匹配,顯示不能被模式所匹配到的行。

-o:僅顯示被模式匹配到的字串,而非整行。

-i:不區分大小寫,ignore-case

-e:支援擴充套件正規表示式,expand

-a:顯示匹配行及下一行,after

-b:顯示匹配行及上一行,befoe

-c:顯示匹配行及上下行

grep基礎用法很簡單,直接命令+'pattern'+檔案就好了

例:找出/etc/passwd檔案中所有與root有關的行。    

12

3

[root@nmshuishui ~]# grep "root" /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

要想實現grep的高階用法,須配合正規表示式及管道。那就先講講基本正規表示式。

二、基本正規表示式

正規表示式就是一類字元所書寫出的模式(pattern),來處理字串的方法,它是以行為單位來進行字串的處理行為,正規表示式通過一些特殊稱號的輔助,可以讓使用者輕易達到查詢、刪除、替換某特定字串的處理程式。    

元字元:不表示字元本身的意義,用於額外功能性的描述。

1)字元匹配:

.:匹配任意單個字元

2)次數匹配

* :匹配任意次         如:x*y: xxy  xy  y

.*:匹配任意長度的任意字元,0次或多次。

\?:匹配0次或1次       如:x\?y: xy  y  xxy  

xxy是匹配了x 2次,這也能行?當然,因為,grep有貪婪模式,盡可能長的去匹配字元。

\:匹配m次         這裡的\代表轉義字元,擴充套件正規表示式中不用

\:匹配最少m次,最多n次

\:匹配至少m次

\:匹配至多n次

3)位置錨定: 用於指定字元出現的位置

^:託字元,錨定行首   ^char

$:錨定行尾   char$

^$:空白行  既是行首,又是行尾,當然就是空白行了

\<:>

\>:錨定詞尾   char\>  char\b    

\:既錨定詞首又錨定詞尾,當然是錨定hello這個單詞。

4)分組

\(\)  \給括號轉義

5)引用

\1:前向引用,引用前面的第1個左括號以及與之對應的右括號中的模式所匹配到的內容                      \(a.b\)xy\1 --> a6bxya6b

\2:前向引用,引用前面的第2個左括號以及與之對應的右括號中的模式所匹配到的內容

三、 小試牛刀:

1)顯示/etc/passwd中以r開頭的行(錨定行首)

12

3

4

5

[root@nmshuishui ~]# grep "^r" /etc/passwd

root:x:0:0:root:/root:/bin/bash

rpc:x:32:32:rpcbind daemon:/var/cache/rpcbind:/sbin/nologin

rtkit:x:499:497:realtimekit:/proc:/sbin/nologin

rpcuser:x:29:29:rpc service user:/var/lib/nfs:/sbin/nologin

2)顯示/etc/passwd中以大小寫s開頭的行

12

3

4

5

6

[root@nmshuishui ~]# grep "^[ss]" /etc/passwd

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

saslauth:x:498:76:"saslauthd user":/var/empty/saslauth:/sbin/nologin

sshd:x:74:74:privilege-separated ssh:/var/empty/sshd:/sbin/nologin

shuishui:x:501:501::/home/shuishui:/bin/bash

3)取出預設shell為bash的且其id為最大的使用者

1

2

[root@nmshuishui ~]# grep "bash$" /etc/passwd |cut -d: -f1,3 -n|tail -1

user1:508

4)顯示/etc/passwd中的一位數或兩位數(錨定詞首、記尾、分組、轉義、次數匹配)

5)找出當前系統上使用者名稱和預設shell相同的使用者(行首、行尾錨定)

6)grep配合其它命

令的用法,找

出本機的ip位址,只顯示ip段(管道、cut)

12

[root@nmshuishui ~]# ifconfig eth0 | grep "inet addr:" | cut -d: -f2 | cut -d' ' -f1

192.168.1.102

四、egrep 擴充套件正規表示式

上面提到過了,在擴充套件正規表示式中不需要轉義符\

元字元:

1)字元匹配:

.:任意單個字元

:指定範圍內的任意單個字元

[^]:指定範圍外的任意單個字元

2)次數匹配:

*:匹配其前面的字元任意次

?:匹配其前面的字元0次或1次

+:匹配其前面的字元1次或多次

:匹配其前面的字元m次

:至少m次,至多n次

:至少m次

:至多n次

3)錨定:

^:錨定行首

$:錨定行尾

\<:>

\>:錨定詞尾    \b

4)分組:

():| :或者     基本正規表示式中沒有|

5)引用:

\1:前向引用,引用前面的第1個左括號以及與之對應的右括號中的模式所匹配到的內容

\2:前向引用,引用前面的第2個左括號以及與之對應的右括號中的模式所匹配到的內容

五、擴充套件正規表示式練習

1)找出ifconfig中1-255之間的整數。

grep與egrep的區別!

grep 傳統的 grep 程式,在沒有引數的情況下,只輸出符合 re 字串之句子.常見引數如下 v 逆反模示,只輸出 不含 re 字串之句子.r 遞迴模式,可同時處理所有層級子目錄裡的檔案.q 靜默模式,不輸出任何結果 stderr 除外.常用以獲取 return value,符合為 true,否...

grep基礎用法

功能 全面搜尋正規表示式並把行列印出來,是一種強大的文字搜尋工具。grep yuan filename 在檔案中搜尋yuan 這個字串,並把含有此字串的行列印出來,也可以多檔案搜尋。grep v yuan filename 在檔案中搜尋除含有yuan這個字串的行的其他行,並列印出來 grep c y...

正規表示式 grep與egrep

n 表示顯示行號 i 表示不區分大小寫刷選 v 表示方向查詢 1 查詢特定的字元 grep n the abc.txt 查詢有the的行,並顯示出行號grep in the abc.txt 不區分大小寫查詢有the的行,並顯示行號如果是想查詢不包含the的行,vn選項即可 grep vn the a...