Linux的文本處理工具grep及初識Regex

來源:互聯網
上載者:User

標籤:學習記錄

一)、Linux的三大文本處理之GREP:

       GREP(Global search REgular expression and Print out the line,全面搜尋Regex並把行列印出來):在給出檔案清單或標準輸出後,grep會對匹配一個或多個Regex的文本進行搜尋,並只輸出匹配(或者不匹配)的行或文本。----摘自於維基百科

       GREP家族包括:

       grep:

       egrep:支援擴充Regex的grep,等同於grep -E。

       fgrep:fixed grep或fast grep,不支援Regex。


二)、文法格式:

       grep [option]... ‘PATTERN‘ FILE...

       注意:以字串逐行尋找。

       常用命令選項:

       -v:反向選取,即顯示不匹配的行。

       -o:僅顯示匹配的字串,而非字串所在的行。

       -i:ignore-case,忽略字元大小寫。

       -E:支援使用擴充Regex。

       -A #:顯示匹配行及下#行。

       -B #:顯示匹配行及上#行。

       -C #:顯示匹配行及上下#行。

       --color=auto:匹配到的字串顯示顏色。



三)、Regex:

       Regular Expression,在代碼中常簡寫為regex、regexp或RE,電腦科學的一個概念。Regex使用單個字串來描述、匹配一系列符合某個句法規則的字串。在很多文字編輯器裡,Regex通常被用來檢索、替換那些符合某個模式的文本。----摘自於維基百科


四)、元字元:


       1)、字元匹配:

              .:匹配任意一個單個字元

              []:匹配一個指定範圍內的字元

              [^]:匹配一個不在指定範圍內的字元

              [:digit:]:數字字元,即[0-9]

              [:lower:]:小寫字元,即[a-z]

              [:upper:]:大寫字元,即[A-Z]

              [:alpha:]:文字字元,即[A-Z,a-z]


              [:alnum:]:文字數字字元,即[A-Z,a-z,0-9]

              [:xdigit:]:十六進位數字,即[0-9,a-f,A-F]

              [:punct:]:標點符號

              [:space:]:空白字元

              [:graph:]:非空白字元

              [:cntrl:]:控制字元

              [:print:]:非Null 字元(包括空格)


       2)、次數匹配:

              *:零次或多次先前字元。

              .*:任意次任一字元

              \?:零次或一次先前字元。

              \{m\}:先前字元重複m次。

              \{m,n\}:先前字元m到n次。

              x\{m,\}:先前字元至少m次。

              x\{0,n\}:先前字元至多n次。


       3)、位置錨定:


              ^:行首錨定。

              $:行尾錨定。

              ^$:空白行。

              \<,/b:錨定詞首,出現於單詞左側。

              \>,\b:錨定詞尾,出現於單詞右側。

              \<..\>,\b..\b:單詞鎖定符。


       4)、分組和引用:

              \(..\):

                     分組中的模式比對到的內容,可由Regex引擎記憶在記憶體中,之後可被引用。

              \#:

                     引用第n個括弧所匹配到的內容,而非模式本身。

五)、擴充Regex

       1)、字元匹配:

              與基本Regex相同。

       2)、次數匹配

              與基本Regex相同,且無需轉譯。

              +:一次或多次先前字元。

              a|b:分支,a或b,

                     con(C|c)at:concat或conCat

                     conC|cat:conC或cat

       3)、位置錨定:

              與基本Regex相同。

       4)、分組和引用

              與基本Regex相同,分組無需轉譯。




六)、執行個體說明:

01、顯示/proc/meminfo檔案中以大寫或小寫S開頭的行。

#grep --color=auto -i ‘^s‘ /proc/meminfo#grep --color=auto -E ‘^(s|S)‘ /proc/meminfo

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6D/02/wKioL1VaIS6wl2oBAACkJsrR-YA080.jpg" title="1.jpg" alt="wKioL1VaIS6wl2oBAACkJsrR-YA080.jpg" />


02、顯示/etc/passwd檔案中其預設shell為非/sbin/nologin的使用者。

#grep --color=auto -v "/sbin/nologin$" /etc/passwd | cut -d: -f1

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6D/07/wKiom1VaH8DgZ6WFAACEa2GwJXs040.jpg" title="2.jpg" alt="wKiom1VaH8DgZ6WFAACEa2GwJXs040.jpg" />


03、顯示/etc/passwd檔案中其預設shell為/bin/bash的使用者;

       進一步:僅顯示上述結果中其ID號最大的使用者。

#grep --color=auto "/bin/bash$" /etc/passwd | sort -t: -k3 -n | tail -n 1 | cut -d: -f1,3,7

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6D/07/wKiom1VaH87zvByiAABX6F_5fcU970.jpg" title="3.jpg" alt="wKiom1VaH87zvByiAABX6F_5fcU970.jpg" />


04、找出/etc/passwd檔案中的一位元或兩位元。

#grep --color=auto "\<[[:digit:]]\{1,2\}\>" /etc/passwd

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6D/07/wKiom1VaH_SAur4EAAKhKTsQrTw728.jpg" title="4.jpg" alt="wKiom1VaH_SAur4EAAKhKTsQrTw728.jpg" />


05、顯示/boot/grub/grub.conf中以至少一個空白字元開頭的行。


#grep --color=auto "^[[:space:]]\{1,}" /boot/grub/grub.conf

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6D/02/wKioL1VaIXzAkX27AAElBYOd6Tg786.jpg" title="5.jpg" alt="wKioL1VaIXzAkX27AAElBYOd6Tg786.jpg" />


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

#grep --color=auto "^#[[:space:]]\{1,\}[^[:space:]]\{1,\}" /etc/rc.d/rc.sysinit

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6D/07/wKiom1VaIBGTNXIbAASQtcoFdI0282.jpg" title="6.jpg" alt="wKiom1VaIBGTNXIbAASQtcoFdI0282.jpg" />


07、找出netstat -tan命令執行結果中以‘LISTEN‘結尾的行。

#netstat -tan | grep --color=auto "LISTEN[[:space:]]*$"

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6D/07/wKiom1VaIBuDj9fjAADPi-vgbHc449.jpg" title="7.jpg" alt="wKiom1VaIBuDj9fjAADPi-vgbHc449.jpg" />


08、添加使用者bash、testbash、basher、nologin(SHELL為/sbin/nologin),而找出當前系統上其使用者名稱和預設shell相同的使用者。

#grep --color=auto "^\([[:alpha:]]\{1,\}\):.*/\1$" /etc/passwd

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6D/02/wKioL1VaIZ6AGznBAADlRRlcy_8654.jpg" title="8.jpg" alt="wKioL1VaIZ6AGznBAADlRRlcy_8654.jpg" />


09、顯示當前系統上root、rhel或centos使用者的預設shell。

#grep --color=auto -E "^(root|rhel|centos):.*" /etc/passwd | cut -d: -f1,7

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6D/02/wKioL1VaIbjyaAYMAAB-ygYdW7g081.jpg" title="9.jpg" alt="wKioL1VaIbjyaAYMAAB-ygYdW7g081.jpg" />


10、找出/etc/rc.d/init.d/functions檔案中某單詞後跟一組小括弧"()"行

#grep --color=auto -E "\<[[:alpha:]]+\>\(\)" /etc/rc.d/init.d/functions

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6D/07/wKiom1VaIEmCEbL4AADVTW_Jxp0155.jpg" title="10.jpg" alt="wKiom1VaIEmCEbL4AADVTW_Jxp0155.jpg" />


11、找出ifconfig命令結果中的1-255之間的數字;

#ifconfig | grep --color=auto -E "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6D/07/wKiom1VaIFOSpn54AAGiK_c0s-M957.jpg" title="11.jpg" alt="wKiom1VaIFOSpn54AAGiK_c0s-M957.jpg" />


本文出自 “小馬的學習記錄” 部落格,請務必保留此出處http://masachencer.blog.51cto.com/8683770/1652635

Linux的文本處理工具grep及初識Regex

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.