正則表達式及grep

正則表達式:

正則表達式是基於樣式匹配的文本處理技術的關鍵所在。

  1. 正則表達式的基本組成部分:

    ^ :行起始標記
    $ :行尾標記
    . :匹配任意一個(單個)字符
    [] :匹配包含在[字符]之中的任意一個字符
    [^] :匹配除[^字符]之外的任意一個字符
    [-] :匹配中指定範圍內的任意一個字符
    ? :匹配之前的項1或0次
    + :匹配之前的項1次或多次
    * :匹配之前的項0或多次
    () :創建一個用於匹配的字串
    {n} :匹配之前的項n次
    {n,} :之前的項至少需要匹配n次
    {n,m} :指定之前的項所必需匹配
    | :交替匹配|兩邊的任意一項
    \ :轉義字符可以將上面的特殊字符進行轉義

  2. 案例:

    ^linux ##linux開始

wKioL1g0NBvyX1JIAABpeX2cFqM204.jpg-wh_50

   linux$ ##linux結束

wKiom1g0NEqynQS-AAA5sGtH3qc035.jpg-wh_50

  linuxfan. ##匹配linuxfans

wKiom1g0NHmBLEE1AABKkalx_Aw618.jpg-wh_50

coo[kl] ##匹配coolcook

wKioL1g0NhzT2bZNAAAyFeJKycM121.jpg-wh_50

9[^5689] ##匹配91,92等,但不匹配95,98

wKioL1g0NjqxOUEkAAA_IGfXzcM407.jpg-wh_50

[0-9] ##匹配任意一個所有的數字

wKioL1g0NjvQ1JpTAACBpHcwv2I906.jpg-wh_50

[a-z]|[A-Z] ##匹配任意一個所有大小寫字母,|屬於擴展正則grep -E支持

wKiom1g0NjvBr_wgAAB2nY2xkf4997.jpg-wh_50

colou?r ##匹配colorclolur,但是不能匹配colouur

wKiom1g0NjvRvpZWAAAnNeiNeM4669.jpg-wh_50

rollno-9+ ##匹配rollno-9rollno-99rollno-999,但不匹配rollno-

co*l  ##匹配clcolcoolcoool             

wKioL1g0NjyB8LkLAABMTK9AS_Y995.jpg-wh_50

ma(tri)x ##匹配matrix

wKiom1g0NjyhuKwiAAA6F2JqX9k388.jpg-wh_50

[0-9]{3} ##匹配任意一個三位數,等於[0-9][0-9][0-9]


wKioL1g0NvvCKlg-AACIl_R3-Gs109.jpg-wh_50

[0-9]{2,} ##匹配任意一個兩位數或更多位的數字

wKiom1g0NvuxAH7hAACDdG2IGt8977.jpg-wh_50

[0-9]{2,5} ##匹配從兩位數到五位數之間的任意一個數字

wKioL1g0NvzDu6G0AABa5C7k3Y0445.jpg-wh_50

Oct (1st | 2nd) ##匹配Oct 1stOct 2nd

wKiom1g0Nvyxxi4aAAA9N3hE4t8592.jpg-wh_50

a\.b ##匹配a.b,但不能匹配ajb

wKioL1g0NvywUAuEAABg0DHkoUY158.jpg-wh_50

[a-z0-9_]+\@[a-z0-9_]+\.[a-z]{2,4}  ##匹配一個郵箱地址

wKioL1g0Nv3Dz3amAABUi9aZpnQ462.jpg-wh_50

[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}  ##匹配IP地址

wKiom1g0Nv2CWDeCAABnCMui_U0774.jpg-wh_50

3.grep用法:


[root@ns ~]# cat /proc/meminfo |grep  -e Mem -e Cache -e Swap  ##查看系統內存、緩存、交換分區-e的作用是匹配多個表達式

wKioL1g0Nv2yUQxcAAB6UJo0AUM183.jpg-wh_50

[root@ns ~]# grep -R -o -n -E  '[a-z0-9_]+\@[a-z0-9_]+\.[a-z]{2,4}' /etc/ ##查找/etc目錄下的所有文件中的郵件地址;-R遞歸,-n表示匹配的行號,-o只輸出匹配內容,-E支持擴展正則表達式,

wKiom1g0Nv6Aod5UAAI46Wkl1l4537.jpg-wh_50

[root@ns ~]# grep -R -c 'HOSTNAME' /etc/ |grep -v "0$"  ##查找/etc/目錄下文件中包含“HOSTNAME”的次數,-c統計匹配次數,-v取反

wKiom1g0Nv-yNFP7AAHgOFA96bY363.jpg-wh_50

[root@ns ~]# grep -R -l 'HOSTNAME' /etc/  ##查找包含“HOSTNAME”的文件名,-l顯示匹配的文件名,-L顯示不匹配的文件名

wKioL1g0NwCBfV6WAAHAy2g9oG8065.jpg-wh_50

[root@ns ~]# dmesg | grep -n --color=auto 'eth'  ##查找內核日誌中eth的行,顯示顏色及行號

wKioL1g0NwGhIInzAADnMIVtLqQ694.jpg-wh_50

[root@ns ~]# dmesg | grep -n -A3 -B2 --color=auto 'eth'  ## dmesg 列出核心信息,再以grep 找出內含 eth 那行,在關鍵字所在行的前兩行與後三行也一起找出出來顯示

wKiom1g0NwLTmA8GAAHxsx9lxvQ391.jpg-wh_50

[root@ns ~]# cat /etc/passwd |grep -c bash$  ##統計系統中能登錄的用戶的個數

wKiom1g0NwLBJQL3AAAxy-4e6XE546.jpg-wh_50

[root@ns tmp]# touch /tmp/{123,123123,456,1234567}.txt  ##創建測試文件,以下三條命令是一樣的效果,匹配文件名123,可以包含1個到多個

wKioL1g0NwORJL7wAAB3_OE6uJI717.jpg-wh_50

[root@ns tmp]# ls |grep -E '(123)+'

[root@ns tmp]# ls |grep '\(123\)\+'

[root@ns tmp]# ls |egrep  '(123)+'

wKioL1g0NwPTGU_bAACze0EMqJA158.jpg-wh_50

[root@ns ~]# ps -ef |grep -c httpd  ##統計httpd進程數量

wKiom1g0NwPyg00YAAAuRNcwynM263.jpg-wh_50

[root@ns ~]# grep -C 4 'games' --color /etc/passwd  ##顯示games匹配的“-C”前後4

wKiom1g0NwSgT2wbAAF0U2YQKsE702.jpg-wh_50

[root@ns ~]# grep ^adm /etc/group  ##查看adm組的信息

wKioL1g0NwSB2q7XAAA9fUJ_4HE985.jpg-wh_50

[root@ns ~]# ip a |grep -E '^[0-9]' |awk -F : '{print $2}'  ##獲取網卡名稱

wKiom1g0NwXx26iAAABALDSQlsk669.jpg-wh_50

[root@ns ~]# ifconfig eth0 |grep -E -o 'inet addr:[^ ]*' |grep  -o '[0-9.]*'  ##截取ip地址,[^ ]*

表示以非空字符作爲結束符,[0-9.]*表示數字和點的組合

wKioL1g0NwaShX6kAABZNG_Ce2k617.jpg-wh_50

[root@ns ~]# ifconfig eth0 |grep -i hwaddr |awk '{print $5}'  ##截取MAC地址

測試文檔:使用grep -E命令練習正則表達式

[root@ns tmp]# cat test.txt

ABcd

10.10.10.10

color

colur

linuxfan2

colouur

rollno-9

i like linux

linux funny.

I am linuxfan.

rollno-99

rollno-999

cl

col

cool

coool

cook

max

matrix

192.168.100.100

123456789

123123123

123123

23346123

123

12

12345

94

95

96

97

98

99

100

Oct 1st

Oct 2nd

a.b

ajb

abc

[email protected]

linux

[root@ns tmp]#

wKioL1g0NwaC5zHEAABM_9WnVWQ170.jpg-wh_50


wKiom1g0NwbhqWIfAADX7RsGEpU439.jpg-wh_50





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章