一、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...