Linux下的grep搜索命令詳解(一)

Linux系統中grep命令是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹 配的行打印出來。grep全稱是Global Regular Expression Print,表示全局正則表達式版本,它的使用權限是全部用戶。正則表達式

grep的工做方式是這樣的,它在一個或多個文件中搜索字符串模板。若是模板包括空格,則必須被引用,模板後的全部字符串被看做文件名。搜索的結果被送到標準輸出,不影響原文件內容。shell

grep可用於shell腳本,由於grep經過返回一個狀態值來講明搜索的狀態,若是模板搜索成功,則返回0,若是搜索不成功,則返回1,若是搜索的文件不存在,則返回2。咱們利用這些返回值就可進行一些自動化的文本處理工做。bash

1.命令格式:tcp

grep [option] pattern file工具

主要參數:ui

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

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

-l:查詢多文件時只輸出包含匹配字符的文件名。regexp

-n:顯示匹配行及 行號。router

-s:不顯示不存在或無匹配文本的錯誤信息。

-v:顯示不包含匹配文本的全部行。

2.命令功能:

用於過濾/搜索的特定字符。可以使用正則表達式能多種命令配合使用,使用上十分靈活。

3.命令參數:

-a   --text   #不要忽略二進制的數據。   

-A<顯示行數>   --after-context=<顯示行數>   #除了顯示符合範本樣式的那一列以外,並顯示該行以後的內容。   

-b   --byte-offset   #在顯示符合樣式的那一行以前,標示出該行第一個字符的編號。   

-B<顯示行數>   --before-context=<顯示行數>   #除了顯示符合樣式的那一行以外,並顯示該行以前的內容。   

-c    --count   #計算符合樣式的列數。   

-C<顯示行數>    --context=<顯示行數>或-<顯示行數>   #除了顯示符合樣式的那一行以外,並顯示該行以前後的內容。   

-d <動做>      --directories=<動做>   #當指定要查找的是目錄而非文件時,必須使用這項參數,不然grep指令將回報信息並中止動做。   

-e<範本樣式>  --regexp=<範本樣式>   #指定字符串作爲查找文件內容的樣式。   

-E      --extended-regexp   #將樣式爲延伸的普通表示法來使用。   

-f<規則文件>  --file=<規則文件>   #指定規則文件,其內容含有一個或多個規則樣式,讓grep查找符合規則條件的文件內容,格式爲每行一個規則樣式。   

-F   --fixed-regexp   #將樣式視爲固定字符串的列表。   

-G   --basic-regexp   #將樣式視爲普通的表示法來使用。   

-h   --no-filename   #在顯示符合樣式的那一行以前,不標示該行所屬的文件名稱。   

-H   --with-filename   #在顯示符合樣式的那一行以前,表示該行所屬的文件名稱。   

-i    --ignore-case   #忽略字符大小寫的差異。   

-l    --file-with-matches   #列出文件內容符合指定的樣式的文件名稱。   

-L   --files-without-match   #列出文件內容不符合指定的樣式的文件名稱。   

-n   --line-number   #在顯示符合樣式的那一行以前,標示出該行的列數編號。   

-q   --quiet或--silent   #不顯示任何信息。   

-r   --recursive   #此參數的效果和指定「-d recurse」參數相同。   

-s   --no-messages   #不顯示錯誤信息。   

-v   --revert-match   #顯示不包含匹配文本的全部行。   

-V   --version   #顯示版本信息。   

-w   --word-regexp   #只顯示全字符合的列。   

-x    --line-regexp   #只顯示全列符合的列。   

-y   #此參數的效果和指定「-i」參數相同。

將/etc/passwd,有出現 root 的行取出來

[finance@master2-dev finance]$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[finance@master2-dev finance]$ grep 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

將/etc/passwd,有出現 root 的行取出來,同時顯示這些行在/etc/passwd的行號

[finance@master2-dev finance]$ grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
11:operator:x:11:0:operator:/root:/sbin/nologin

在關鍵字的顯示方面,grep 可使用 --color=auto 來將關鍵字部分使用顏色顯示。 這但是個很不錯的功能啊!可是若是每次使用 grep 都得要自行加上 --color=auto 又顯的很麻煩~ 此時那個好用的 alias 就得來處理一下啦!你能夠在 ~/.bashrc 內加上這行:『alias grep='grep --color=auto'』再以『 source ~/.bashrc 』來當即生效便可喔! 這樣每次運行 grep 他都會自動幫你加上顏色顯示啦

用 dmesg 列出核心信息,再以 grep 找出內含 eth 那行,要將捉到的關鍵字顯色,且加上行號來表示

[finance@master2-dev finance]$  dmesg | grep -n --color=auto 'eth'
603:eth0: no IPv6 routers present

在關鍵字所在行的前兩行與後三行也一塊兒捉出來顯示

[finance@master2-dev finance]$ dmesg | grep -n -A3 -B2 --color=auto 'eth'
601-RPC: Registered tcp transport module.
602-RPC: Registered tcp NFSv4.1 backchannel transport module.
603:eth0: no IPv6 routers present
604-hrtimer: interrupt took 5294012 ns
605-rz[13034]: segfault at fffffffffffffff9 ip 00000038a4a7b93c sp 00007fff00deed88 error 4 in libc-2.12.so[38a4a00000+18a000]
606-sh[5880]: segfault at 0 ip (null) sp 00007fffbfac9e70 error 14 in bash[400000+d4000]

根據文件內容遞歸查找目錄

# grep 'energywise' *           #在當前目錄搜索帶'energywise'行的文件

# grep -r 'energywise' *        #在當前目錄及其子目錄下搜索'energywise'行的文件
# grep -l -r 'energywise' *     #在當前目錄及其子目錄下搜索'energywise'行的文件,可是不顯示匹配的行,只顯示匹配的文件

這幾個命令很使用,是查找文件的利器。

相關文章
相關標籤/搜索