2021-05-12 14:32:11
grep,egrep 及正規表示式
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
本文永久更新連結地址:http://www.linuxidc.com/Linux/2015-09/122971.htm
相關文章