正則表達式:
正則表達式是基於樣式匹配的文本處理技術的關鍵所在。
正則表達式的基本組成部分:
^ :行起始標記
$ :行尾標記
. :匹配任意一個(單個)字符
[] :匹配包含在[字符]之中的任意一個字符
[^] :匹配除[^字符]之外的任意一個字符
[-] :匹配中指定範圍內的任意一個字符
? :匹配之前的項1或0次
+ :匹配之前的項1次或多次
* :匹配之前的項0或多次
() :創建一個用於匹配的字串
{n} :匹配之前的項n次
{n,} :之前的項至少需要匹配n次
{n,m} :指定之前的項所必需匹配
| :交替匹配|兩邊的任意一項
\ :轉義字符可以將上面的特殊字符進行轉義案例:
^linux ##以linux開始
linux$ ##以linux結束
linuxfan. ##匹配linuxfans等
coo[kl] ##匹配cool或cook
9[^5689] ##匹配91,92等,但不匹配95,98等
[0-9] ##匹配任意一個所有的數字
[a-z]|[A-Z] ##匹配任意一個所有大小寫字母,|屬於擴展正則grep -E支持
colou?r ##匹配color或clolur,但是不能匹配colouur
rollno-9+ ##匹配rollno-9、rollno-99,rollno-999,但不匹配rollno-
co*l ##匹配cl,col,cool,coool等
ma(tri)x ##匹配matrix
[0-9]{3} ##匹配任意一個三位數,等於[0-9][0-9][0-9]
[0-9]{2,} ##匹配任意一個兩位數或更多位的數字
[0-9]{2,5} ##匹配從兩位數到五位數之間的任意一個數字
Oct (1st | 2nd) ##匹配Oct 1st或Oct 2nd
a\.b ##匹配a.b,但不能匹配ajb
[a-z0-9_]+\@[a-z0-9_]+\.[a-z]{2,4} ##匹配一個郵箱地址
[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ##匹配IP地址
3.grep用法:
[root@ns ~]# cat /proc/meminfo |grep -e Mem -e Cache -e Swap ##查看系統內存、緩存、交換分區-e的作用是匹配多個表達式
[root@ns ~]# grep -R -o -n -E '[a-z0-9_]+\@[a-z0-9_]+\.[a-z]{2,4}' /etc/ ##查找/etc目錄下的所有文件中的郵件地址;-R遞歸,-n表示匹配的行號,-o只輸出匹配內容,-E支持擴展正則表達式,
[root@ns ~]# grep -R -c 'HOSTNAME' /etc/ |grep -v "0$" ##查找/etc/目錄下文件中包含“HOSTNAME”的次數,-c統計匹配次數,-v取反
[root@ns ~]# grep -R -l 'HOSTNAME' /etc/ ##查找包含“HOSTNAME”的文件名,-l顯示匹配的文件名,-L顯示不匹配的文件名
[root@ns ~]# dmesg | grep -n --color=auto 'eth' ##查找內核日誌中eth的行,顯示顏色及行號
[root@ns ~]# dmesg | grep -n -A3 -B2 --color=auto 'eth' ##用 dmesg 列出核心信息,再以grep 找出內含 eth 那行,在關鍵字所在行的前兩行與後三行也一起找出出來顯示
[root@ns ~]# cat /etc/passwd |grep -c bash$ ##統計系統中能登錄的用戶的個數
[root@ns tmp]# touch /tmp/{123,123123,456,1234567}.txt ##創建測試文件,以下三條命令是一樣的效果,匹配文件名123,可以包含1個到多個
[root@ns tmp]# ls |grep -E '(123)+'
[root@ns tmp]# ls |grep '\(123\)\+'
[root@ns tmp]# ls |egrep '(123)+'
[root@ns ~]# ps -ef |grep -c httpd ##統計httpd進程數量
[root@ns ~]# grep -C 4 'games' --color /etc/passwd ##顯示games匹配的“-C”前後4行
[root@ns ~]# grep ^adm /etc/group ##查看adm組的信息
[root@ns ~]# ip a |grep -E '^[0-9]' |awk -F : '{print $2}' ##獲取網卡名稱
[root@ns ~]# ifconfig eth0 |grep -E -o 'inet addr:[^ ]*' |grep -o '[0-9.]*' ##截取ip地址,[^ ]*
表示以非空字符作爲結束符,[0-9.]*表示數字和點的組合
[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
linux
[root@ns tmp]#