Linux 基礎正則表達式和擴展正則表達式

基礎正則表達式:node

^   第1個符號 ,以什麼什麼開頭   ^m正則表達式

$  第2個符號,以什麼什麼結尾  m$    ,還表示空行,或空格,能夠用cat  -An 試一下服務器

^$ 第3個符號,空行  什麼符號都沒有ip

.  第4個符號,表示任意 「一個字符」 io

\  第5個符號, 轉義字符不解析特殊符號的含義 ,  \n 至關於回車鍵 ,  \t  至關於tab鍵ast

* 第6個符號,表示前一個字符連續出現了0次或0次以上awk

.* 第7個符號,表示任意字符,包括空行,正則表達式表示全部或連續出現的。基礎

[ ] 第8個符號,中括號,中括號內每次查找一個字符。擴展

[^] 第9個符號,[^acb] , 表示排除 a,b,csed

擴展正則表達式:

+ 第10個符號,表示前一個字母連續出現1次或1次以上

 

擴展正則表達式:

+ 第10個符號,表示前一個字母連續出現1次或1次以上

|  第11個符號,(豎線)表示  " 或者 "  的意思

() 第12個符號,(小括號)表示一個總體  反向引用 / 後向引用

例如:sed  -r   's#(..)(..)(..)#\1<(\2)>\3#g'    ##後向引用

{} 第13個符號,{n,m} 前一個字符至少連續出現N次,最多連續出現m次

a{1,10}  ##表示  a最少連續出現1次,最多連續出現10次

 

grep 參數:

-E  等於 egerp

-n  顯示行號

-i  不區分大小寫

-o 只輸出匹配的內容

 

sed 參數:

-n 指定行號

-r 支持擴展正則表達式

's#123#456#g' 表示把123 替換成456

 

awk 參數:

-F 指定分隔符

NR 表示行號

$ 表示取某一列

練習題1:用sed或awk取出服務器eth0的IP地址。

 

一、用sed取出服務器eth0的ip地址

[root@MB-10-0-0-200 ~]# ifconfig eth0 ###查看服務器的IP

eth0      Link encap:Ethernet  HWaddr 00:0C:29:FB:AD:B8  

inet addr:192.168.11.138  Bcast:192.168.11.255  Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fefb:adb8/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:6661195 errors:0 dropped:0 overruns:0 frame:0

TX packets:6770 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000 

RX bytes:8342856346 (7.7 GiB)  TX bytes:1103955 (1.0 MiB)

 

[root@MB-10-0-0-200 ~]# ifconfig eth0|sed -nr '2s#^.*addr:(.*).*Bcast.*$#\1#gp'  ### \1 表示前一個()內的內容,就是咱們要取出的內容

192.168.11.138 

 

###############備註######################

 

|sed -nr '2s#^.*addr:(.*).*Bcast.*$#\1#gp'   等於  |sed -n 2p|sed -r 's#^.*addr:(.*).*Bcast.*$#\1#g' 

 

#########################################

 

二、用awk取出服務器eth0的ip地址

[root@MB-10-0-0-200 ~]# ifconfig eth0 ###查看服務器的IP

eth0    Link encap:Ethernet  HWaddr 00:0C:29:FB:AD:B8  

inet addr:192.168.11.138  Bcast:192.168.11.255  Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fefb:adb8/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:6665321 errors:0 dropped:0 overruns:0 frame:0

TX packets:6772 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000 

RX bytes:8347065816 (7.7 GiB)  TX bytes:1104075 (1.0 MiB)

 

[root@MB-10-0-0-200 ~]# ifconfig eth0|awk -F '[ :]+' 'NR==2{print $4}' ###注意:'[ :]' 中括號內一個字符是空格!!!

192.168.11.138

###############備註######################

 

|awk -F '[ :]+' 'NR==2{print $4}' 等於 |awk NR==2|awk -F '[ :]+' '{print $4}'

 

#########################################

 

練習題2:用awk或sed 取出 /etc/hosts 文件的權限(以數字的形式顯示)

 

一、用awk取 /etc/hosts 文件的權限

[root@MB-10-0-0-200 ~]# stat /etc/hosts ####首先查看hosts文件的權限,權限爲:0644

  File: `/etc/hosts'

  Size: 476        Blocks: 8          IO Block: 4096   regular file

Device: 802h/2050d Inode: 786460      Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2018-04-05 17:00:16.938264330 +0800

Modify: 2018-04-05 16:59:22.926263885 +0800

Change: 2018-04-05 16:59:22.926263885 +0800

 

[root@MB-10-0-0-200 ~]# stat /etc/hosts|awk -F '[(/]' 'NR==4{print $2}' ###以(和/ 爲分隔符,將第四行的第二列取出

0644

###############備註######################

 

|awk -F '[(/]' 'NR==4{print $2}' 等於 |awk NR==4|awk -F '[(/]' '{print $2}'

 

#########################################

 

二、用sed取 /etc/hosts 文件的權限

[root@MB-10-0-0-200 ~]# stat /etc/hosts ####首先查看hosts文件的權限,權限爲:0644

  File: `/etc/hosts'

  Size: 476        Blocks: 8          IO Block: 4096   regular file

Device: 802h/2050d Inode: 786460      Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2018-04-05 17:00:16.938264330 +0800

Modify: 2018-04-05 16:59:22.926263885 +0800

Change: 2018-04-05 16:59:22.926263885 +0800

 

[root@MB-10-0-0-200 ~]# stat /etc/hosts|sed -nr '4s#^.*\(('[0-9]+')/-.*$#\1#gp' ### \1 表示前一個()內的內容,就是咱們要取出的內容

0644 ### \( 表示取消 ( 的特殊含義

###############備註######################

 

|sed -nr '4s#^.*\(('[0-9]+')/-.*$#\1#gp' 等於 |sed -n 4p|sed -r 's#^.*\(('[0-9]+')/-.*$#\1#g'

 

#########################################