Day 19 正则与取出ip地址

Day 19 正则与取出ip地址

第1章 例题

1.1 第三行的inet替换为oldboy

[root@oldboyedu50-lnb ~]# ip a s eth0 |sed -n 3p

    inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0

[root@oldboyedu50-lnb ~]# ip a s eth0 |sed -n 3p|sed 's#inet#oldboy#g'

(ip a s eth0 |sed -n '3s#inet#oldboy#gp'由上条命令合并)

    oldboy 10.0.0.200/24 brd 10.0.0.255 scope global eth0

1.2 取出stat /etc/hosts 文件权限644  0644

[root@uegame ~]# stat /etc/hosts|sed -n '4p'|sed -r 's#^.*\(0(.*)/-.*$#\1#g'    方法一

644

[root@uegame ~]# stat /etc/hosts|sed -nr '4s#^.* \((.*)/-.*$#\1#gp'             方法二

0644

[root@uegame ~]# stat /etc/hosts|awk 'NR==4'|awk -F '[(/]+' '{print $2}'        方法三

0644

[root@uegame ~]# stat /etc/hosts|awk -F '[(/]+' 'NR==4{print $2}'               方法四

0644

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

644

1.3 已知/oldboy/ett.txt文件内容为

Oldboy

Olldboooy

Test

grep/egrep过滤出前两行

[root@uegame /oldboy]# grep '^o' ett.txt

       oldboy

       olldboooy

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

       oldboy

       olldboooy

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

       oldboy

       olldboooy

[root@uegame /oldboy]# egrep 'ol+dbo+y' ett.txt

       oldboy

       olldboooy

       sed方法

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

       oldboy

       olldboooy

       awk方法

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

       oldboy

       olldboooy

1.4 三剑客进行过滤空行

创建test.txt 内容如下:排除空行

cat /oldboy/test.txt

oldboy

xizi

xiaochao

[root@uegame /oldboy]# sed '/^$/d' test.txt

oldboy

xizi

xiaochao

!取反,不显示

[root@uegame /oldboy]# sed -n '/^$/!p' test.txt

oldboy

xizi

xiaochao

[root@uegame /oldboy]# awk '!/^$/' test.txt

oldboy

xizi

xiaochao

[root@uegame /oldboy]# grep '.' test.txt

oldboy

xizi

xiaochao

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

oldboy

xizi

xiaochao

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

oldboy

xizi

xiaochao

1.5 三剑客关于过滤功能的区别

grep       过滤             显示执行的过程(-o 加上颜色

sed         过滤             替换      修改文件内容    取行

awk    过滤             取列      (指定分隔符-F 计算  统计

1.6 取出ifconfigIP地址

[root@oldboyedu50-lnb ~]# ifconfig eth0    先查看内容

eth0      Link encap:Ethernet  HWaddr 00:0C:29:59:D4:13 

          inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe59:d413/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

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

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

          collisions:0 txqueuelen:1000

          RX bytes:60628583 (57.8 MiB)  TX bytes:11673902 (11.1 MiB)

1.6.1 方法一 awk

awk '条件{动作}'

条件  NR==3   NR>=3 找出哪一行

动作  命令 print

[root@oldboyedu50-lnb ~]# ifconfig eth0 |awk 'NR==2{print $2}'   NR==2和{}一起使用 简化命令

[root@oldboyedu50-lnb ~]# ifconfig eth0 |awk -F'[: ]+' 'NR==2{print $4}'  执行 取出

10.0.0.200

1.6.2 方法二 sed 反向引用

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

反向引用就是将需要的内容用()保护起来 最后输出

10.0.0.200

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

简化 将sed -n 2p加到后面的内容中

10.0.0.200

1.6.3 方法三 sed 替换

sed命令,将不需要显示的,逐步替换

[root@oldboyedu50-lnb ~]# ifconfig eth0|sed -n '2p'|sed 's#^.*dr:##g'|sed 's# .*$##g'

10.0.0.200

1.6.4 方法四 sed [^0-9.]

使用[^ ]0-9.之外的替换成空格,再使用awk取出第一列

[root@znix ~]# ifconfig eth0|sed -n '2s#[^0-9.]# #gp'|awk '{print $1}'

10.0.0.200

1.7 取出ip a s eth0IP地址

ifconfig和取ip a s eth0的方法是互通的

1.7.1 方法一 awk

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

10.0.0.200

1.7.2 方法二 sed |(或者)

[root@oldboyedu50-lnb ~]# ip a s eth0 |sed -n 3p

把ip地址前面的内容替换掉

[root@oldboyedu50-lnb ~]# ip a s eth0 |sed -n 3p |sed 's#^.*t ##g'

10.0.0.200/24 brd 10.0.0.255 scope global eth0

把ip地址之后的替换掉

[root@oldboyedu50-lnb ~]# ip a s eth0 |sed -n 3p |sed 's#^.*t ##g'|sed 's#/.*$##g'

10.0.0.200

逐步优化 使用2个sed

[root@oldboyedu50-lnb ~]# ip a s eth0 |sed -n 3p |sed -r 's#^.*t |/.*$##g'

10.0.0.200

[root@oldboyedu50-lnb ~]# ip a s eth0 | sed -nr '3s#^.*t |/.*$##gp'

10.0.0.200

最简化版

1.7.3 方法三 sed 后向引用

sed -n 3p |sed -r 's#^.*t (.*)/.*$#\1#g'

可以简化为

sed -nr 's#^.*t (.*)/.*$#\1#gp'

在前面先保护(你想要的内容),在后面通过\数字使用

第三行的inet替换为oldboy

[root@oldboyedu50-lnb ~]# ip a s eth0 |sed -n 3p

    inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0

[root@oldboyedu50-lnb ~]# ip a s eth0 |sed -n 3p|sed 's#inet#oldboy#g'

    oldboy 10.0.0.200/24 brd 10.0.0.255 scope global eth0

ip a s eth0 |sed -n 3p|sed 's#inet#oldboy#g'

#第三行的inet替换为oldboy

ip a s eth0 |sed -n '3s#inet#oldboy#gp'

[root@oldboyedu50-lnb ~]# ip a s eth0 |sed -n 3p          先确认取出的行

    inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0

[root@oldboyedu50-lnb ~]# ip a s eth0 |sed -n 3p |sed -r 's#^.*t (.*)/.*$#\1#g' 

最简短

10.0.0.200

1.7.4 方法四 egrep(了解)

只通过正则表达式取出ip

[root@oldboyedu50-lnb ~]# ip a s eth0 |egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

    inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0

[root@oldboyedu50-lnb ~]# ip a s eth0 |egrep '([0-9]{1,3}\.){3}[0-9]{1,3}'

    inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0

[root@oldboyedu50-lnb ~]# ip a s eth0 |egrep '([0-9]{1,3}\.?){4}'

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

    inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0

第2章 目录的硬链接数量

2.1 etc目录的硬链接数是?

创建一个ett   ett硬链接数为2(本身是一个硬链接,点)

    mkdir -p /oldboy/ett

    [root@uegame /oldboy]# ll -d ett

    drwxr-xr-x 2 root root 4096 May 21 14:48 ett

[root@uegame /oldboy]# ll -di ett ett/.

523284 drwxr-xr-x 2 root root 4096 May 21 14:48 ett

523284 drwxr-xr-x 2 root root 4096 May 21 14:48 ett/.

       再创建一个目录,

    [root@uegame /oldboy]# mkdir -p /oldboy/ett/oldboy

       ett的硬链接数会变为3(本身是一个硬链接,点,当前目录下的上一级目录)

    [root@uegame /oldboy]# ll -d ett

    drwxr-xr-x 3 root root 4096 May 21 14:51 ett

blob.png

第3章 显示日期

date 日期

-d 根据你的描述显示指定的日期

d  '-7day'  七天之前

d  '+7day'  七天之后

3.1 显示日期

 [root@uegame /oldboy]# date

Mon May 21 15:31:08 CST 2018

显示7天之前的日期

[root@uegame /oldboy]# date -d '-7day' +%F_%w

 


 

3.2 总结

1.      正则表达式与取出ip地址

2.      三剑客过滤与区别

3.      目录的硬链接数

4.      显示日期


猜你喜欢

转载自blog.51cto.com/13859679/2155383
今日推荐