首頁 > php教程 > PHP开发 > 主體

grep 指令詳解及相關事例

高洛峰
發布: 2016-12-13 14:40:17
原創
1114 人瀏覽過

一.匹配字元

.    符合任一字元

[ ]  符合指定範圍內的任一字元

[^]  符合飛指定範圍內的任意字元

:alpha: 字元] 字元[low; :] 小寫字母字元

[:upper:] 大寫字母字元

[:digit:] 數字

[:alnum:] 字母數字字元

[:space:] 空白回車符、換行符、垂直製表符和換頁符

[:punct:] 標點字元

[:cntrl:] 控製字元(禁止列印)

[:print:] 可列印字元

使用時一般使用兩個中括號,具體會在下面的例子中使用。

二.匹配次數

*      任意配對前面的字元

.*    符合任意長度的任意字元(注意貪婪模式,例如  grep  “r.*t” /etc/c/D. }  指定前面的字元至少出現m次,至多出現N次。

x{m,}    指定前面的字元至少出現m次

x{0,n}  指定前面的字元至多出現N次

x{m}    精確匹配m次

x{m}    精確匹配m次

x{m}    精確匹配m次

x{m}    實際匹配m次

?或1次

三.錨定符

1.^  錨定行首    grep  "^r..t"  /etc/passwd

2.$  錨定行尾

3.^$ 錨定空白行  grep  "^$"  /etc/passwd

4.

錨定詞首    grep  "r..t>"  /etc/passwd

範例(容易混淆):

至少包含一個空白字元          grep  "[[space::]{1,}

至少包含一個非空白字元        grep  "[^[:space:]]{1,}"  /etc/passwd

沒有一個空白字元etc/passwd

6.()對字元分組  grep  "(l..e).*1r"

範例:

grep --color "l([13]):1:.*:1"  / etc/inittab

四.選項

-v    對結果取反

-i    忽略字母大小寫

-o   正規表示式

-A n    顯示配對到的行下面n行

-B n    顯示配對到的行上面n行

-C n    顯示配對到的行上方各顯示n行

-C n    顯示配對到的行上各顯示n行

1.找出系統中user1使用者的相關資訊。 (提前建好user11,myuser1)(易錯)

grep "user1"  /etc/passwd    所有包含user1的行

grep ""  /etc/passwd   

grep ""  /etc/passwd    表面可以添加以下用戶,就不會了

useradd  -c  "user1's  uncle"  /etc/passwd  -c  是註釋

grep "^"  /etc/passwd   成功匹配

相關資訊。

grep "^user[0-9]{1,}>"  /etc/passwd

3.分析/etc/inittab 文件如下兩行文本的特徵,編寫可以精確查到的類似兩行的模式,

要求每行的數字必須相同。

l1:1:wait:/etc/rc.d/rc 1

l3:3:wait:/etc/rc.d/rc 3

grep "l([13]):1:.*: .* 1"  inittab

擴展:匹配所有上述特徵:grep "l([0-9]):1:.*:.* 1"  inittab

如果超過10,需要添加最小匹配:grep "l( [0-9]{1,}):1:.*:.* 1"  inittab

4.顯示/proc/meminfo檔案中以不區分大小寫的s開頭的行

grep "^[sS] " /proc/meminfo

5.顯示/etc/passwd中以nologin結尾的行

grep "nologin$" /etc/passwd

6.顯示/etc/inittab中以#開頭,且後面跟著一個或是多個空白字符,而後又跟了任意非空白字符的行

grep "^#[[:space:]]{1,}[^[:space:]]"  /etc/inittab

7.顯示/etc/inittab包含了兩個冒號中間一個數字的行

grep ":[0-9]:" /etc/inittab

8.顯示/boot/grub/grub.conf 檔案中以一個或多個空白字元的行

grep ":[0-9]:" /etc/inittab

9.顯示/etc/inittab檔案中以一個數字開頭並以一個開頭數字相同的數字結尾的行。

grep "^([0-9]).*1$"  /etc/inittab

10.顯示/etc/inittab檔案中非空白的行

grep -v  "^$"  /etc/inittab

11.取出目前網路介面的相關IP位址(不包含127.0.0.1)

ifconfig |grep "inet addr" |grep -v "127.0.0.1"| cut -d: -f2|cut -d" " - f1

ifconfig |grep -A 1 "eth" |grep -o "addr:[0-9.]{1,}"|cut -d: -f2

五.擴充正規表示式

與正規表示式不同之處:

()替換為()

{}替換為{}

+  次數匹配,匹配其前的額字符一次或多次

|  或

示例:

數字為1-255之間的整數

ifconfig|grep --color -E ""


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!