天天看點

文本處理工具grep、egrep的具體用法

一、grep、egrep含義

grep:(global search regular expression(RE)and print out the line);文本搜尋工具,根據使用者指定的文本模式(PATTERN)對目标檔案進行逐行搜尋,并顯示能夠被模式比對到的行。

egrep:相當于 grep -E ;使用擴充正規表達式來構模組化式。

為了更好的閱讀和區分其中的元字元和選項,都以紅色和加粗辨別出來。

在文中截圖中的指令egrep沒有使用選項加顔色,使用的是臨時更改的環境變量:指令:

       export GREP_OPTINOS='--color=auto'

       export GREP_COLOR='01;31'

二、基本用法

1、格式:grep [options] 'PATTERN' file, ...(可以指定多個檔案)

<a href="http://s3.51cto.com/wyfs02/M02/12/5B/wKioL1MEXkzCEwBSAAClliFg1KA033.jpg" target="_blank"></a>

--color=auto:可以高亮顯示比對到的内容;

<a href="http://s3.51cto.com/wyfs02/M00/12/59/wKiom1MESybwa2kdAABK2RgWPRA467.jpg" target="_blank"></a>

2、參數

2.1:常用參數

-v:反向顯示,顯示不能被模式所比對到的行;

<a href="http://s3.51cto.com/wyfs02/M00/12/5A/wKioL1MES5jj-hfQAACOBoqFEOk777.jpg" target="_blank"></a>

-o:隻顯示被模式比對到的字串,而非整行;

<a href="http://s3.51cto.com/wyfs02/M01/12/5A/wKioL1MES-7Bw1l0AAApyt7RISQ973.jpg" target="_blank"></a>

-i:不區分字元大小寫。ignore-case;

<a href="http://s3.51cto.com/wyfs02/M01/12/5A/wKioL1METNmQsa8ZAAAq04hgU44972.jpg" target="_blank"></a>

-E:支援擴充正規表達式;

-A#:顯示比對到的内容及其下面#行;

<a href="http://s3.51cto.com/wyfs02/M01/12/5A/wKioL1METl-ifsNuAABKvK8Nlrc214.jpg" target="_blank"></a>

-B#:顯示比對到的内容及其上面#行;

-C#:顯示比對内容及其上下各#行;

<a href="http://s3.51cto.com/wyfs02/M00/12/59/wKiom1METrqRW5TZAAB4LbULIMk809.jpg" target="_blank"></a>

2.2:其他參數

-s或--no-messages: 不顯示錯誤資訊。

-V或--version: 顯示版本資訊。

-w或--word-regexp: 隻顯示全字元合的列。    

-x或--line-regexp: 隻顯示全列符合的列。

-y: 此參數的效果和指定“-i”參數相同。

--help 線上幫助。

同時也可以使用man grep來檢視具體的詳細參數與說明。

三、正規表達式

1、含義:正規表達式(Regular Expression);正規表達式使用單個字元串來描述、比對一系列符合某個句法規則的字元串。

       基本正規表達式和擴充正規表達式:工作于貪婪模式,盡可能長的比對字元;

2、基本正規表達式元字元

字元比對:

.:比對任意單個字元;

<a href="http://s3.51cto.com/wyfs02/M01/12/5A/wKioL1MET-zDwsJ0AAAhlvydMN8953.jpg" target="_blank"></a>

[]:比對指定範圍内的任意單個字元;

範圍:

<a href="http://s3.51cto.com/wyfs02/M02/12/5A/wKioL1MEUMqTDGcgAAAqH_UV9_Y750.jpg" target="_blank"></a>

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

<a href="http://s3.51cto.com/wyfs02/M00/12/5A/wKioL1MEU6nT5mWMAAAtpYhxa4Y358.jpg" target="_blank"></a>

次數比對:

*:比對其前面字元的任意次;0次或多次

<a href="http://s3.51cto.com/wyfs02/M01/12/5A/wKiom1MEVNjzTtTyAACFqrpFzXA134.jpg" target="_blank"></a>

.*:比對任意長度的任意字元;

<a href="http://s3.51cto.com/wyfs02/M01/12/5A/wKioL1MEVRvT-AKMAAA_qAlG1e0875.jpg" target="_blank"></a>

\?:比對其前面字元的0次或1次;

<a href="http://s3.51cto.com/wyfs02/M01/12/5A/wKioL1MEVWbDo0ptAAAzTOzjt3g542.jpg" target="_blank"></a>

\{m\}:比對m次;

<a href="http://s3.51cto.com/wyfs02/M00/12/5B/wKioL1MEVeSxRmAaAAA3DrfyjuU897.jpg" target="_blank"></a>

\{m,n\}:比對至少m次,至多n次;

<a href="http://s3.51cto.com/wyfs02/M01/12/5B/wKioL1MEVgvyNuS4AAAqx1Mby-U004.jpg" target="_blank"></a>

\{m,\}:比對至少m次;

<a href="http://s3.51cto.com/wyfs02/M00/12/5B/wKioL1MEVl6wapyKAAApCT1s6nY155.jpg" target="_blank"></a>

\{0,n\}:比對至多n次;

<a href="http://s3.51cto.com/wyfs02/M00/12/5A/wKiom1MEVwGDLlnzAAAwFYMTi38680.jpg" target="_blank"></a>

位置錨定:

^:錨定行首;

<a href="http://s3.51cto.com/wyfs02/M01/12/5B/wKioL1MEVxbwbuxZAAArXFy1HdY591.jpg" target="_blank"></a>

$:錨定行尾;

<a href="http://s3.51cto.com/wyfs02/M02/12/5B/wKioL1MEV1OyuuuWAABffvIh_eE184.jpg" target="_blank"></a>

\&lt;|\b:錨定詞首;

<a href="http://s3.51cto.com/wyfs02/M00/12/5B/wKioL1MEWNOh7kQXAAAqMDGxaVI993.jpg" target="_blank"></a>

\&gt;|\b:錨定詞尾;

<a href="http://s3.51cto.com/wyfs02/M01/12/5A/wKiom1MEWQnBG-6TAAAl7IdBilg978.jpg" target="_blank"></a>

^$:為空白行;

分組:

\(\):分組

<a href="http://s3.51cto.com/wyfs02/M00/12/5E/wKiom1MEkYOSFYJfAABcFQHoRzI580.jpg" target="_blank"></a>

\#:#為數字;對分組的字元串基于位置進行引用;

   例:\1;引用前面的第一個左括号以及與之對應的右括号中的模式所比對的内容。

<a href="http://s3.51cto.com/wyfs02/M02/12/5F/wKioL1MEkaOSUqs-AABF7jMScvk231.jpg" target="_blank"></a>

3、擴充正規表達式元字元:大部分與正規表達式的元字元是相同的,但是\轉義符是不需要添加的。

.:任意單個字元;

[]:指定範圍内的任意單個字元;

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

*:其前面的字元任意次;

?:比對其前面的字元0次或1次;

+:比對其前面的字元至少1次;

<a href="http://s3.51cto.com/wyfs02/M00/12/5A/wKiom1MEWwSgw5XzAAAwM7VZFJo512.jpg" target="_blank"></a>

{m}:比對其前面的字元m次;

{m,n}:至少m次,至多n次;

{m,}:至少m次;

{0,n}:至多n次;

錨定:與基本正規表達式相同;

分組:

():分組;

|:或者;

<a href="http://s3.51cto.com/wyfs02/M00/12/5B/wKioL1MEW8fzD-zaAABIEzHD6WY651.jpg" target="_blank"></a>

四、具體的執行個體

顯示/proc/meminfo中以大小寫S開頭的行;

<a href="http://s3.51cto.com/wyfs02/M02/12/5B/wKiom1MEYiuBPqPnAAB9vMHmaLE025.jpg" target="_blank"></a>

取出預設shell為非bash的使用者;

<a href="http://s3.51cto.com/wyfs02/M00/12/5B/wKiom1MEZIWQPZanAABSMavvLrU596.jpg" target="_blank"></a>

顯示/etc/rc.d/rc.sysinit檔案中,以#開頭,後面跟至少一個空白字元,而後又有至少一個非空白字元的行;

<a href="http://s3.51cto.com/wyfs02/M02/12/5B/wKiom1MEZVmBGxbNAAEdr8YjuEA942.jpg" target="_blank"></a>

添加使用者bash和testbash、basher,而後找出目前系統上其使用者名和預設shell相同的使用者;

<a href="http://s3.51cto.com/wyfs02/M01/12/5C/wKiom1MEazmCit-tAACgIHxBBLw523.jpg" target="_blank"></a>

寫一個比對規則可以比對IP位址:1.0.0.1--223.255.255.254

1

<code>egrep</code> <code>"\&lt;([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-2][0-3])\.([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\&gt;"</code>

<a href="http://s3.51cto.com/wyfs02/M02/12/76/wKiom1MIO4yBe3HOAAEL68Qph-0088.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M01/12/76/wKioL1MIO5zCnjOZAAE4l7Nl0Sk504.jpg" target="_blank"></a>

本文轉自Mr_陳 51CTO部落格,原文連結:http://blog.51cto.com/chenpipi/1360509,如需轉載請自行聯系原作者