首頁  >  文章  >  運維  >  Linux指令grep使用介紹

Linux指令grep使用介紹

巴扎黑
巴扎黑原創
2017-09-04 14:12:052186瀏覽

1.作用

Linux系統中grep指令是一種強大的文本搜尋工具,它能使用正規表示式搜尋文本,並把匹 配的行列印出來。 grep全名為Global Regular Expression Print,表示全域正規表示式版本,它的使用權限是所有使用者。

2.格式

grep [options]

3.主要參數

[options]主要參數:

-c:只輸出匹配行的計數。

-I:不區分大 小寫(只適用於單字元)。

-h:查詢多檔案時不顯示檔案名稱。

-l:查詢多檔案時只輸出包含符合字元的檔案名稱。

-n:顯示符合行及 行號。

-s:不顯示不存在或無符合文字的錯誤訊息。

-v:顯示不包含符合文字的所有行。

pattern正規表示式主要參數:

\: 忽略正規表示式中特殊字元的原始意義。

^:符合正規表示式的開始行。

$: 符合正規表示式的結束行。

\<:從符合正規表示 式的行開始。

\>:到符合正規表示式的行結束。

[ ]:單一字符,如[A]即A符合要求 。

[ - ]:範圍,如[A-Z],即A、B、C一直到Z都符合要求 。

。 :所有的單一字元。

* :有字符,長度可以為0。

4.grep指令使用簡單實例

$ grep ‘test’ d*

#顯示所有以d開頭的檔案包含 test的行。

$ grep ‘test’ aa bb cc

顯示在aa,bb,cc檔案中符合test的行。

$ grep ‘[a-z]\{5\}’ aa

顯示所有包含每個字串至少有5個連續小寫字元的字串的行。

$ grep 'w\(es\)t.*\1′ aa

如果west被匹配,則es就被儲存到記憶體中,並標記為1,然後搜尋任意個字元(.*),這些字元後面緊跟著另外一個es(\1),找到就顯示該行。如果用egrep或grep -E,就不用」\號進行轉義,直接寫成’w(es)t.*\1′就可以了。

5.grep指令使用複雜實例

假設您正在'/usr/src/Linux/Doc'目錄下搜尋帶字串'magic'的檔案:

# $ grep magic /usr/src/Linux/Doc/*

sysrq.txt:* How do I enable the magic SysRQ key?

#sysrq.txt:* How do I use the magic SysRQ key?

其中檔案'sysrp.txt'包含該字串,討論的是SysRQ 的功能。

預設情況下,’grep’只搜尋目前目錄。如果 此目錄下有許多子目錄,’grep’會以以下形式列出:

grep: sound: Is a directory

這可能會使’grep’ 的輸出難於閱讀。這裡有兩種解決的辦法:

明確要求搜尋子目錄:grep -r

或忽略子目錄:grep -d skip

如果有很多輸出時,您可以透過管道將其轉到'less'上閱讀:

$ grep magic /usr/src/Linux/Documentation/* | less

這樣,您就可以更方便地閱讀。

有一點要注意,您必需提供一個檔案過濾方式(搜尋全部檔案的話用 *)。如果您忘了,’grep’會一直等著,直到程式中斷。如果您遇到了這樣的情況,按 ,然後再試一次。

下面還有一些有趣的命令列參數:

grep -i pattern files :不區分大小寫地搜尋。預設區分大小寫,

grep -l pattern files :只列出符合的檔案名,

grep -L pattern files :列出不符合的檔案名,

grep -w pattern files :只匹配整個單詞,而不是字符串的一部分(如匹配'magic',而不是'magical'),

grep -C number pattern files :匹配的上下文分別顯示[number]行,

grep pattern1 | pattern2 files :顯示符合pattern1 或pattern2 的行,

grep pattern1 files | grep pattern2 :顯示既符合pattern1 又符合pattern2 的行。

grep -n pattern files  即可顯示行號資訊

grep -c pattern files  即可找出總行數

這裡仍有一些用於搜尋的特殊符號:

\< 和\> 分別標註單字的開始與結尾。

例如:

grep man * 會符合'Batman'、'manic'、'man'等,

grep '\

grep '\' 只匹配'man',而不是'Batman'或'manic'等其他的字串。

'^':指符合的字串在行首,

'$':指符合的字串在行尾,

Grep 指令用法大全

1、 參數: 

-I :忽略大小寫 

-c :列印符合的行數 

-l :從多個檔案中找出包含符合項目 

-v :尋找不包含符合項目的行 

-n:列印包含符合項目的行和行標 

2、RE(正規表示式)

\ 忽略正規表示式中特殊字元的原始意義 

^ 符合正規表示式的開始行 

$ 符合正規表示式的結束行 

\< 從符合正規表示式的行開始 

\> 到符合正規表示式的行結束 

[ ] 單一字元;如[A] 即A符合要求 

[ - ] 範圍;如[A-Z]即A ,B,C一直到Z都符合要求 

. 所有的單個字符 

* 所有字符,長度可以為0 

3、舉例 

# # ps -ef | grep in.telnetd 

root 19955 181 0 13:43:53 ? 0:00 in.telnetd 

# 更多. ##b124230 

b034325 

#a081016 

m7187998 

m7282064 

a022021##1 #m9324822 

b103303 

#a013386 

b044525 

m8987131 # B103303 

BADc2345 

# more size.txt | grep '[a-b]' 範圍;如[A-Z]即A,B,C一直到Z都符合要求 

b124230 

b034325 

a081016 

a022021 

#a061048 

b103303 

#a5

# more size.txt | grep '[a-b]'* 

b124230 

b034325 

a081016# 

m7187998

m7282064 

a022021 

a061048 

m9324822 

#b103303 

a013386

#b103303 

a013386#4#54

m8987131 

B081016 

M45678 

B103303 

BADc2345 

# more size.如[A] 即A符合要求 

b124230 

#b034325 

b103303 

b044525 

# morerep size. [bB]' 

b124230 

b034325 

b103303 

#b044525 

B081016 

b044525 

B081016 

#b0#B1032 ##BADc2345 

# grep 'root' /etc/group 

root::0:root 

bin::2:root,bin,daemon 

#sys::3:root,bin,sys,adm 

adm::4:root,adm,daemon 

uucp::5:root,uucp 

# mail::6:root 

tty::7:root,tty,adm 

lp::8:root,lp,adm 

nuucp::9:root ,nuucp 

daemon::12:root,daemon 

## grep '^root' /etc/group 符合正規表示式的開始行 

root::0: root 

# grep 'uucp' /etc/group 

uucp::5:root,uucp 

nuucp::9:root,nuucp 

# # grep '\

uucp::5:root,uucp 

# grep 'root$' /etc/group 符合正規表示式的結束行 

root::0:root 

mail::6:root 

## 更多 size.txt | grep -i 'b1..*3' -i :忽略大小寫 

b124230 

b103303 

B103303 

更多 size.txt | grep -iv 'b1..*3' -v :查找不包含符合項目的行 

b034325 

a081016 

m7187998 

#m7282064 

a022021 

#a0 ##m9324822 

a013386 

#b044525 

m8987131 

B081016 

more size.txt | grep -in 'b1..*3' 

1:b124230 

9:b103303 

15:B103303 

# grep '$' /etc/init.d/nfs.server | wc -l 

128 

# grep '\$' /etc/init.d/nfs.server | wc –l 忽略正規表示式中特殊字元的原始意義 

15 

## grep '\$' /etc/init.d/nfs.server 

#case " $1" in 

>/tmp/sharetab.$$ 

#[ "x$fstype" != xnfs ] && 

echo "$path\t$res\ t$fstype\t$opts\t$desc" 

>>/tmp/sharetab.$$ 

/usr/bin/touch -r /etc/dfs/sharetab / tmp/sharetab.$$ 

/usr/bin/mv -f /tmp/sharetab.$$ /etc/dfs/sharetab 

if [ -f /etc/dfs/dfstab ] && /usr/bin/egrep -v '^[ ]*(#|$)' 

if [ $startnfsd -eq 0 -a -f /etc/rmmount.conf ] && 

#if [ $startnfsd -ne 0 ]; then 

elif [ ! -n "$_INIT_RUN_LEVEL" ]; then 

while [ $wtime -n "$_INIT_RUN_LEVEL" ]; then 

while [ $wtime -n 0 ]; do 

while [ $wtime -gt 0 ]; do 

#wtime=`expr $wtime - 1` 

if [ $wtime -eq 0 ]; then 

echo "Usage: $0 { start | stop }" 

# more size.txt 

the test file 

their are files 

The end 

grep 'the' size.txt 

the test file 

their are files 

# grep '\

the test file 

their are files 

## grep 'the\>' size.txt 

the test file 

# grep '\' size.txt 

####the test file ####### grep '\<[Tt]he\>' size.txt ######the test file#####============ ==================================================== ======######1,簡介####

使用正規表示式的一個多用途文字搜尋工具.這個php?name=%C3%FC%C1%EE" onclick="tagshow(event)" class="t_tag">指令本來是ed行編輯器中的一個php?name=%C3%FC%C1%EE" onclick="tagshow(event)" class="t_tag">指令/過濾器:

        g/re/p -- global - regular expression - print.

基本格式

grep pattern [file...]

(1)grep 搜尋字串[filename]

(2)grep 正規表示式[filename]

在檔案中搜尋所有pattern 出現的位置, pattern 既可以是要搜尋的字串,也可以是一個正規表示式.

#注意:在輸入要搜尋的字串時最好使用雙引號/而在模式匹配使用正規表示式時,請注意使用單引號

2,grep的選項

    -c只輸出匹配行的計數

    -i 不區分大小寫(用於單字元)

    -n 顯示匹配的行號

    -v 不顯示不包含匹配文字的所以有行

    -s 不顯示錯誤訊息

    -E 使用擴充正規表示式

    更多的選項請看:man grep

#3,常用grep實例

(1)多個檔案查詢

    grep "sort" *.doc       #見檔案名稱的符合

#(2)行符合:輸出符合行的計數

    grep -c "48" data.doc   #輸出文件中含有48字元的行數

(3)顯示符合行和行數

    grep -n "48" data.doc       #顯示所有符合48的行和行號

(4)顯示非符合的行

    grep -vn "48" data.doc  

##    grep -vn "48" data.doc     ## 輸出所有不包含48的行

(4)顯示非符合的行

    grep -vn "48" data.doc      #輸出所有不包含48的行

(5)大小寫敏感

    grep -i "ab" data.doc       #輸出所有含有ab或Ab的字串的行

4, 正規表示式的應用

#(1)正規表示式的應用(注意:最好把正規表示式用單引號括起來)

    grep '[239].' data.doc      #輸出所有含有2,3或9開頭的,並且是兩個數字的行

(2)不匹配測試

    grep '^[^48]' data.doc      #不匹配行首是48的行

(3)使用擴展模式匹配

    grep -E '219|216' data.doc

(4) ...

    這需要在實務上不斷應用和總結,熟練正規表示式。

5, 使用類別名稱

可以使用國際模式匹配的類別名稱:

#[[:upper:]]   [A-Z]

##[[ :lower:]]   [a-z]

[[:digit:]]   [0-9]

[[:alnum:]]   [0-9a-zA-Z]

[[:space:]]   空格或tab

[[:alpha:]]   [a-zA-Z]

#(1)使用

# grep '5[[:upper:]][[:upper:]]' data.doc     #查詢以5開頭以兩個大寫字母結尾的行

以上是Linux指令grep使用介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn