歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> grep,egrep 及正則表達式

grep,egrep 及正則表達式

日期:2017/2/28 13:57:58   编辑:Linux教程

Linux中一切皆文件:文本文件,對文本文件的搜索就非常的關鍵和常用。

Linux文本搜索工具:grep ,egrep,fgrep,文本搜索指文本文件中內容的搜索。

文件名的搜索是linux中bash的特性,globbing,文件名通配,有點windows中的搜索相似,但功能跟強大。一般配合 ls 命令使用。可參考視頻:bash基礎特性(01)

globbing:中的元字符: *:用來通配任意長度任意字符,?:用來匹配單個字符,[]:用於比配指定范圍內的字符,[^]:用於取反范圍內的字符。

總結:globbing文件名通配:既限定了長度,又限定了可用的字符范圍。

既然要搜索,必須有過濾條件,這裡就要用到正則表達式,他是linux 文本處理工具的非常基礎和重要。

正則表達式(過濾條件)正則表達式中的元字符,以正常字符組合而成。

基本正則表達式:grep

擴展正則表達式:egrep ,grep E,

fgrep:fast,不支持使用正則表達式

grep : Global search Regular expression and print out the line

grep 命令:

grep [OPTION] PATTEN [FILE…]

--color =auto

-o :只顯示被過濾模式匹配到的內容

-i :搜索時不區分字符大小寫 grep "no"

-v :顯示不能被過濾模式匹配到的行

這裡用到grep的一個參數--color,color有三個值供選擇:never、always、auto。always和auto的區別就是,always會在任何情況下都給匹配字段加上顏色標記,當通過管道或重定向時就會多出一些控制字符,結果會變成
export ^[[1;32m^[[KGREP^[[m^[[K_OPTIONS='--color=always'
export ^[[1;32m^[[KGREP^[[m^[[K_COLOR='1;32'
而auto則只在輸出到終端時才加上顏色。
可以在.bashrc裡加上
export GREP_OPTIONS='--color=auto'
來實現高亮匹配,具體用什麼顏色,可以通過
export GREP_COLOR='a;b' #默認是1;31,即高亮的紅色
來設置,其中:
a:可以選擇:【0,1,4,5,7,8】 b: 可選擇:

0 關閉所有屬性 30 black
1 設置高亮度 31 red

4 下劃線 32 green

5 閃爍 33 yellow

7 反顯 34 blue

8 消隱 35 purple

36 cyan

37 white

基本正則表達式元字符:

字符匹配:

. :配任意單個字符

[] :配指定范圍內的任意單個字符

[^] :匹配指定范圍外的任單個字符,相當於[]取反

[0-9],[[:digit :]],[^0-9][^[:digit :]]

[a-z],[[:lower:]]

[A-Z],[[:upper:]]

[[:space:]] 空格符

[[:punct :]] 標點符號

[0-9a-z A-Z],[[:alnum :]]

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

次數匹配:在期望匹配的字符後面提供一個控制符,用於表達匹配其前面字符指定的次數

*:用於匹配左側字符任意長度,表示0次,1次或多次

"ab*c"=ac,or,abbc,or abbbc,or abbbbc

.*:任意長度任意字符,默認工作於貪婪模式,

\?:匹配其前的字符,匹配0次或1次,表示其左側字符可有可無

"ab\?c"=ac,或abc

\+:匹配前面(左側)字符1次或多次

"ab\+c"=abc,abbc,abbbc

\{m\}:精確匹配左側字符m次 。ab\{2\}c=abbc

\{m,n\}:至少m次,至多n次。ab\{0,3\}c=ac,abc,abbc,abbbc

\{0,3\}:最多3次

\{m,\}:最少m次

錨定位置的字符》匹配位置的限定:

^:錨定行首。^ab

$:錨定行尾。ab$

"^ab.*ba$":以ab開頭中間任意字符以ab結尾

"^$":匹配空白行 , grep "^$" /etc/rc.d | wc l 表示統計空白行數

"^PATTERN$:用於匹配整行。"^a4*$"

單詞錨定:由非特殊字符組成的連續的字符串

\<:錨定詞首,也可\b # grep "\<ab"/etc

\>:錨定詞尾,也可\b # grep "ab\>"/etc

\<PATTERN\>:匹配PATTERN能匹配到的整個單詞

# ifconfig | grep "\<[0-9]\{2\}\>":精確匹配2位數字單詞

分組:\(\)

分組的小括號中的模式匹配到的內容,會在執行過程中被正則表達式引擎記錄下來,並保存內置的變量中;這些變量分別是\1, \2, ...

\1: 從左側起,第一個左括號,以及與之配對的右括號中間的模式所匹配到的內容; \2以此類推。

#"\(ab\)*c"

擴展正則表達式的元字符:

字符匹配:同基本正則表達式

次數匹配:

*: 0次或多次

?: 0次或1次;

+: 1次以上;

{m}: 精確匹配m次;

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

錨定:

^: 錨定行首

$: 錨定行尾

\<, \b: 詞首錨定;用於表示單詞的模式的左側;

\>, \b:詞尾錨定;用於表示單詞的模式的右側;

分組:

同基本正則表達式

( )

支持或的概念

a|b:匹配a或者b

練習:

1、顯示/etc/passwd文件中以bash結尾的行

# grep “bash$”/etc/passwd

# grep –E “bash$”/etc/passwd

# egrep “bash$” /etc/passwd

2、顯示/etc/passwd文件中的兩位數或三位數

# grep “\<[[:digit:]]\{2,3\}\>”/etc/passwd

# egrep “\<[0-9]{2,3}\>”/etc/passwd

3、顯示`netstat -tan`命令結果中以‘LISTEN’後跟0個、1個或者多個空白字符結尾的行

# netstat –tan | grep “LISTEN[[:space:]]*$”

# netstat –tan | egrep “LISTEN[[:space:]]*$”

4、添加用戶bash、testbash、basher以及nologin用戶(nologin用戶的shell為/sbin/nologin);而後找出/etc/passwd文件中用戶名與其shell名相同的行

# grep "^\([[:alnum:]]\+\>\).*\1$" /etc/passwd

# egrep "^([[:alnum:]]+\>).*\1$" /etc/passwd

5、顯示當前系統上root、CentOS或者user1用戶的默認shell和UID (請事先創建這些用戶,若不存在)

# grep -E "^(root|centos|user1)\>" /etc/passwd |cut -d:-f3,7

# egrep "^(root|centos|user1)\>"/etc/passwd |cut -d: -f3,7

6、找出/etc/rc.d/init.d/functions文件中某單詞(單詞中間可以存在下劃線)後面跟著一組小括號的行

# egrep -o "\<[[[:alnum:]_]+\>\(\)"/etc/rc.d/init.d/functions

7、使用echo輸出一個路徑,而後egrep找出其路徑基名;進一步的使用egrep取出其目錄名

# echo/etc/sysconfig/network-scripts/ | egrep -o "[[:alnum:]-]+/?$"

# echo /etc/sysconfig/network-scripts| egrep -o "(/.*/)"

8、找出ifconfig命令執行結果中1-255之間的數字

# ifconfig | egrep"\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"

Linux 基礎入門教程----正則表達式基礎 http://www.linuxidc.com/Linux/2015-08/121441.htm

Linux正則表達式sed 詳述 http://www.linuxidc.com/Linux/2015-04/116309.htm

Linux正則表達式特性及BRE與ERE的區別 http://www.linuxidc.com/Linux/2014-03/99152.htm

grep使用簡明及正則表達式 http://www.linuxidc.com/Linux/2013-08/88534.htm

正則表達式的用法 http://www.linuxidc.com/Linux/2013-03/81897.htm

正則表達式之零寬斷言 http://www.linuxidc.com/Linux/2013-03/81897.htm

Linux中正則表達式與文件格式化處理命令(awk/grep/sed) http://www.linuxidc.com/Linux/2013-03/81018.htm

基礎正則表達式 http://www.linuxidc.com/Linux/2014-09/106296.htm

常用正則表達式整理 http://www.linuxidc.com/Linux/2014-10/108076.htm

Copyright © Linux教程網 All Rights Reserved