12.27 -第三關練習題之正則練習

12.27       node

第三關練習題之正則練習centos

第1章 取出網卡的ip地址(ifconfig

1.1 定位

[root@oldboy oldboy]# ifconfig eth0|sed -n '2p'                       方法一:sedide

          inet addr:10.0.0.201  Bcast:10.0.0.255  Mask:255.255.255.0centos7

[root@oldboy oldboy]# ifconfig|awk 'NR==2'                            方法二:awkspa

          inet addr:10.0.0.201  Bcast:10.0.0.255  Mask:255.255.255.0命令行

[root@oldboy oldboy]# ifconfig eth0|grep 'cast'                       方法三:greporm

          inet addr:10.0.0.201  Bcast:10.0.0.255  Mask:255.255.255.0          找惟一ip

 

1.2 解決:

1.2.1 方法一:sed |(管道)  把目標先後替換爲空(至關於刪除)

[root@oldboy oldboy]# ifconfig eth0|sed -n '2p'|sed 's#.*r:##g'|sed 's# B.*##g' ci

10.0.0.201get

1.2.2 方法二:sed  |’(或者)

[root@oldboy oldboy]# ifconfig eth0|sed -n '2p'|sed -r 's#^.*r:| B.*$##g'

10.0.0.201                                          注意把空格也去掉

1.2.3 方法三:sed(後向引用)

[root@oldboy oldboy]# ifconfig eth0|sed -n '2p'|sed -r 's#^.*r:(.*)B.*$#\1#g'

10.0.0.201

終結命令

[root@oldboy oldboy]# ifconfig eth0 |sed -rn '2s#^.*r:(.*) Bca.*$#\1#gp'

10.0.0.201

 

1.2.4 方法四:awk -F

[root@oldboy oldboy]# ifconfig eth0 |awk 'NR==2'|awk -F "[ :]+" '{print $4}'

10.0.0.201

終結命令

'NR==2{print $4}'

 ‘條件    {命令}’

[root@oldboy oldboy]# ifconfig eth0|awk -F "[ :]+" 'NR==2{print $4}'

10.0.0.201

 

1.2.5 方法五grep/egrep

[root@oldboyedu43-lnb oldboy]# ifconfig eth0|awk 'NR==2'|egrep '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' -o
10.0.0.200
10.0.0.255
255.255.255.0
[root@oldboyedu43-lnb oldboy]# ifconfig eth0|awk 'NR==2'|egrep '([0-9]+\.){3}[0-9]+' -o
10.0.0.200
10.0.0.255
255.255.255.0
[root@oldboyedu43-lnb oldboy]# ifconfig eth0|awk 'NR==2'|egrep '([0-9]+\.?){4}' -o
10.0.0.200
10.0.0.255
255.255.255.0

方法六:cut  1. cut   -d指定分隔符     -f 指定某一列

[root@oldboy oldboy]# ifconfig eth0|awk 'NR==2'|cut -d ":" -f2

10.0.0.201  Bcast

[root@oldboy oldboy]# ifconfig eth0|awk 'NR==2'|cut -d ":" -f2|cut -d " " -f1

10.0.0.201

2. cut      sed命令把:替換爲空格, cut指定空格爲分隔符

[root@oldboy oldboy]# ifconfig eth0|awk 'NR==2'|sed 's#:# #g'|cut -d " " -f13

10.0.0.201

 

1.3 練習:執行ip a s eth0命令取出ip

[root@oldboy ~]# ip a s eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:9c:08:2c brd ff:ff:ff:ff:ff:ff

    inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

    inet6 fe80::20c:29ff:fe9c:82c/64 scope link

       valid_lft forever preferred_lft forever

方法一: awk終極版

[root@oldboy ~]# ip a s eth0 |awk '/eth0$/'

    inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

[root@oldboy ~]# ip a s eth0 |awk -F "[ /]+" '/eth0$/{print $3}'

10.0.0.201

方法二: awk

[root@oldboyedu43-lnb oldboy]# ip a s eth0 |awk 'NR==3'|awk -F [ /]+   '{print $3}'

10.0.0.200

方法三:sed

[root@oldboyedu43-lnb oldboy]# ip a s eth0 |awk 'NR==3'|sed -r 's#^.*t (.*)/.*$#\1#g'

10.0.0.200

 

1.4 總結:

1.4.1 理解-F指定分隔符

F [  :]+

先找出[  :]+ 正則匹配到什麼內容

egrep [  :]+

把找出來的內容做爲分隔符

1.4.2 理解--連續出現(+)

[root@oldboyedu43-lnb oldboy]# echo '#####1@@@@@2'

#####1@@@@@2

[root@oldboyedu43-lnb oldboy]# echo '#####1@@@@@2'|egrep '[#@]'

#####1@@@@@2

[root@oldboyedu43-lnb oldboy]# echo '#####1@@@@@2'|egrep '[#@]' -o

#

#

#

@

@

@

[root@oldboyedu43-lnb oldboy]#

[root@oldboyedu43-lnb oldboy]# echo '#####1@@@@@2'|egrep '[#@]+'

#####1@@@@@2

[root@oldboyedu43-lnb oldboy]# echo '#####1@@@@@2'|egrep '[#@]+' -o

#####

@@@@@

[root@oldboyedu43-lnb oldboy]# echo '#####1@@@@@2'|awk -F "[#@]+"  '{print $2}'

1

第2章 過濾出oldboy 31333741

方法一:

[root@oldboy ~]# echo "I am oldboy,myqq is 31333741"|awk -F "[ ,]" '{print $3,$6}'

oldboy 31333741

方法二:

[root@oldboy ~]# echo "I am oldboy,myqq is 31333741"|sed -r 's#.*m (.*),.*s (.*)#\1 \2#g'

oldboy 31333741

 

 

 

第3章 取出/etc/hosts 文件權限

[root@oldboy oldboy]# stat /etc/hosts

  File: `/etc/hosts'

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

Device: 803h/2051d Inode: 260127      Links: 2

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

Access: 2017-12-21 23:29:37.849768706 +0800

Modify: 2017-05-20 18:18:04.258143406 +0800

方法一:sed

[root@oldboy oldboy]# stat /etc/hosts|sed -n '4p'|sed -r 's#^.*\((.*)/-.*$#\1#g'

0644

方法二:sed終極版

[root@oldboy oldboy]# stat /etc/hosts|sed -rn '4s#^.*\((.*)/-.*$#\1#gp'

0644

方法三:awk

[root@oldboy oldboy]# stat /etc/hosts|awk -F "[(/]" 'NR==4{print $2}'

0644

方法四:命令自己選項

[root@oldboy oldboy]# stat -c%a /etc/hosts

644

第4章 已知/oldboy/test.txt 文件內容爲

oldboy

 

xizi

 

xiaochao

請問如何把文件中的空格過濾掉(要求命令行實現)  ^$   .    [a-z]

方法一:

[root@oldboy]# grep -v '^$' test.txt

oldboy

xizi

xiaochao

方法二:

grep  ‘.’test.txt

方法三:

[root@oldboyedu43-lnb oldboy]# grep '^[a-zA-Z]' test.txt

oldboy

xizi

xiaochao

方法四: awk   !  取反

 awk '!/^$/' test.txt

方法五: sed  d     刪除

sed '/^$/d' test.txt

方法六:

[root@oldboy oldboy]# sed -rn '/[a-z]/p'  test.txt

ldboy

xizi

xiaochao

方法七:

[root@oldboy oldboy]# awk  '/[a-z]/'  test.txt

ldboy

xizi

xiaochao

方法八:

[root@oldboy oldboy]# sed -n '/./p' test.txt

ldboy

xizi

xiaochao

方法九:

[root@oldboy oldboy]# sed -n '/./p' test.txt

ldboy

xizi

xiaochao

 

4.1 總結:

grep  過濾  找東西

sed   過濾  取行   替換    修改文件內容

awk  過濾   取列   計算統計

 

第5章 已知/oldboy/ett.txt 文件內容爲:

oldboy

olldboooy

test

請使用 grep egrep 正則匹配的方式過濾出前兩行內容

方法一:

[root@oldboyedu43-lnb oldboy]# grep '^o' ett.txt

oldboy

olldboooy

方法二:

[root@oldboyedu43-lnb oldboy]# awk '/^o/' ett.txt

oldboy

olldboooy

方法三:

[root@oldboyedu43-lnb oldboy]# sed -n '/^o/p' ett.txt

oldboy

olldboooy

方法四:

[root@oldboyedu43-lnb oldboy]# egrep 'ol+dbo+y' ett.txt

oldboy

olldboooy

方法五:

[root@oldboyedu43-lnb oldboy]# awk '/ol+dbo+y/' ett.txt

oldboy

olldboooy

方法六:

[root@oldboyedu43-lnb oldboy]# sed -nr '/ol+dbo+y/p' ett.txt

oldboy

olldboooy

方法七:

[root@oldboy oldboy]# awk '/^[a-o]/' ett.txt

oldboy

olldboooy

方法八:sed顯示某一行用法

[root@oldboy oldboy]# sed -n '1,2p' ett.txt

oldboy

olldboooy

方法九:awk顯示某一行用法

[root@oldboy oldboy]# awk 'NR= =1,NR= =2' ett.txt

oldboy

olldboooy

方法十:sed--排除t開頭的行

[root@oldboy oldboy]# sed -n  '/^[^t]/p' ett.txt

oldboy

olldboooy

方法十一:find --排除t開頭的行

1.[root@oldboy oldboy]# grep '^[^t]' ett.txt

oldboy

olldboooy

2.[root@oldboy oldboy]# grep -v '^[t]' ett.txt

oldboy

olldboooy

 

 

第6章 擴展:

6.0.1 系統中默認有centos7沒有ifconfig命令,須要yum安裝

ip  a  s eth0=====ip  address show  eth0     查看ip地址

 

6.0.2 單引號、雙引號及不加引號的簡單區別

1.單引號 所見即所得

[root@oldboyedu43-lnb oldboy]# echo '$LANG $(hostname) `pwd` {1..5}'

$LANG $(hostname) `pwd` {1..5}

 

2.雙引號 與單引號相似 特殊符號會被解析  ! $() $ ``  

[root@oldboyedu43-lnb oldboy]# echo "$LANG $(hostname) `pwd` {1..5}"

en_US.UTF-8 oldboyedu43-lnb /oldboy {1..5}

 

3.不加引號 和雙引號相似 支持通配符

[root@oldboyedu43-lnb oldboy]# echo $LANG $(hostname) `pwd` {1..5}

en_US.UTF-8 oldboyedu43-lnb /oldboy 1 2 3 4 5

相關文章
相關標籤/搜索