day19正則表達式應用


 
 

 

正則表達式應用

 

作者:左婷婷

歸檔:學習筆記

2018/8/2

 

快捷鍵:

Ctrl + 1    標題1

Ctrl + 2    標題2

Ctrl + 3    標題3

Ctrl + 4    實例

Ctrl + 5    程序代碼

Ctrl + 6    正文

格式說明:

藍色字體:註釋

×××背景:重要

綠色背景:注意


 

老男孩教育教學核心思想6重:重目標、重思路、重方法、重實踐、重習慣、重總結

學無止境,老男孩教育成就你人生的起點!

聯繫方式:

網站運維QQ交流羣:

Linux  385168604

架構師 390642196

Python 29215534

大數據 421358633

官方網站:

http://www.oldboyedu.com


 

1.1 取出IP地址... 1

1.1.1  Hostname -I 1

1.1.2 取出ifconfigIP地址... 1

1.1.3 取出ip a s  eth0IP地址... 2

1.2 取出文件權限... 3

1.2.1 方法一 awk. 3

1.2.2 方法二 sed後向引用... 3

1.2.3 方法三 stat -c. 3

1.3 過濾空行和過濾前兩行... 4

1.3.1 三劍客已經認識的功能... 4

1.3.2 過濾空行... 4

1.3.3 使用正則過濾前兩行... 5

1.4 關於硬鏈接... 5

1.5 顯示說設置系統時間... 6

1.5.1 按照要求的格式顯示日期... 6

1.5.2 根據你的描述顯示指定日期... 7

1.5.3 修改時間... 7

1.5.4 自動同步系統時間... 7

 

 

 

 

 

 

 

 

 

 

 


1.1 取出IP地址

1.1.1 Hostname -I

hostname -I 該命令可以直接取出IP地址 但是取出的是所有的網卡的IP地址

所以一般配合管道過濾使用(最簡單)

所有網卡的ip地址

[root@oldboyedu50-lnb ~]# hostname -I    該處只有一塊網卡 所以只顯示了一個IP地址

10.0.0.200

1.1.2 取出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.1.2.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.1.2.2  方法二 sed 反向引用

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

反向引用就是將需要的內容用()保護起來 然後通過\1輸出

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.1.2.3  方法三 sed 替換

sed命令,將不需要顯示的,逐步替換

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

替換掉ip地址之前和之後的內容

10.0.0.200

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

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

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

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

10.0.0.200

1.1.3 取出ip a s eth0IP地址

1.1.3.1  方法一 awk

[root@oldboyedu50-lnb ~]# ip a s eth0 |awk   -F'[ /]+'  'NR==3{print $3}' 以空格和\分割取列

10.0.0.200

1.1.3.2  方法二 sed |(或者)

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

[root@oldboyedu50-lnb ~]# ip a s eth0 |sed -n 3p |sed 's#^.*t ##g'  把ip地址前面的內容替換掉

[root@oldboyedu50-lnb ~]# ip a s eth0 |sed -n 3p |sed 's#^.*t ##g'|sed 's#/.*$##g'把ip後面的替換掉

10.0.0.200

 [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.1.3.3  方法三 sed 後向引用

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

可以簡化爲

sed -nr 's#^.*t (.*)/.*$#\1#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.1.3.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

1.2 取出文件權限

取出stat /etc/hosts 文件權限 644 0644

1.2.1 方法一 awk

 [root@oldboyedu50-lnb ~]# stat /etc/hosts |awk 'NR==4'

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

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

NR表示行數  使用-F  指定分隔符 然後取出權限

0644

[root@oldboyedu50-lnb ~]# stat /etc/hosts |awk -F'[(/]'   'NR==4{print $2}'  優化

0644

1.2.2 方法二 sed後向引用

 [root@oldboyedu50-lnb ~]# stat /etc/hosts |sed -n 4p |sed -r 's#(^.*\()([0-9]+)(/.*$)#\1#g'

Access: (

[root@oldboyedu50-lnb ~]# stat /etc/hosts |sed -n 4p |sed -r 's#(^.*\()([0-9]+)(/.*$)#\2#g'

0644                        使用()保護 最後使用\2顯示出來

[root@oldboyedu50-lnb ~]# stat /etc/hosts |sed -n 4p |sed -r 's#^.*\(([0-9]+)/.*$#\1#g'

0644

1.2.3 方法三 stat -c

stat -c%a直接取權限數字

有問題一定要man以下

[root@oldboyedu50-lnb ~]# stat -c%a /etc/hosts            取權限數字

644

1.3 過濾空行和過濾前兩行

1.3.1 三劍客已經認識的功能

grep

過濾  顯示執行過程 加上顏色

sed

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

awk

過濾  取列(-F    計算 統計

1.3.2 過濾空行

已知/oldboy/test.txt文件內容爲:

oldboy

 

xizi

 

xiaochao

請問如何把文件中的空行過濾掉(要求命令行實現)。

通過三劍客進行過濾

1.3.2.1  方法一 grep

 [root@oldboyedu50-lnb /oldboy]# grep -v '^$' test.txt        直接-v過濾空行

oldboy

xizi

xiaochao

1.3.2.2  方法二 sed

1.3.2.3  sed + d的用法

[root@oldboyedu50-lnb /oldboy]# sed '/^$/d' test.txt    d====delete 按照行位單位

oldboy

xizi

xiaochao

sed + !的用法

 [root@oldboyedu50-lnb /oldboy]# sed -n  '/^$/!p' test.txt   !p   不顯示 

oldboy

xizi

xiaochao

1.3.2.4  方法三 awk

 [root@oldboyedu50-lnb /oldboy]# awk '!/^$/' test.txt     !取反

oldboy

xizi

xiaochao

1.3.3 使用正則過濾前兩行

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

oldboy

olldboooy

test

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

1.3.3.1  方法一 egrep

直接過濾oldbo無法完成題目  使用+ (前一個字符出現1次或一次以上)

[root@oldboyedu50-lnb /oldboy]# egrep 'oldboy' ett.txt

oldboy

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

oldboy

olldboooy

1.3.3.2  方法二 sed

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

oldboy

olldboooy

1.3.3.3  方法三 awk

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

oldboy

olldboooy

1.4 關於硬鏈接

新目錄的硬鏈接數爲2

目錄下的硬鏈接數爲 2+下級目錄數

ett目錄爲例  ett本身是一個硬鏈接  ett/.是一個硬鏈接  如果下面沒有目錄只有文件那硬鏈接數爲2

如果還有下層目錄 那麼就多一個連接  ett/ett/..

所以硬連接數爲2+下級目錄數

linux下通過mkdir命令創建一個新目錄/oldboy/ettett的硬鏈接數是多少,爲什麼?

[root@oldboyedu50-lnb /oldboy]# mkdir -p /oldboy/ett

[root@oldboyedu50-lnb /oldboy]# ll -d ett

drwxr-xr-x 2 root root 4096 Jul 20 02:01 ett                硬連接數爲2

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

1046554 drwxr-xr-x 2 root root 4096 Jul 20 02:01 ett

1046554 drwxr-xr-x 2 root root 4096 Jul 20 02:01 ett/.

mkdir -p /oldboy/ett/oldboy

ett目錄的硬連接數是?

 [root@oldboyedu50-lnb /oldboy]# ll -d ett

drwxr-xr-x 3 root root 4096 Jul 20 02:05 ett

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

1046554 drwxr-xr-x 3 root root 4096 Jul 20 02:05 ett

1046554 drwxr-xr-x 3 root root 4096 Jul 20 02:05 ett/.

1046554 drwxr-xr-x 3 root root 4096 Jul 20 02:05 ett/oldboy/..

1.5 顯示說設置系統時間

1.5.1 按照要求的格式顯示日期

%F===%Y-%m-%d     %F  %Y-%m-%d    --

2018-08-01

按照要求的格式顯示日期

[root@oldboyedu50-lnb /oldboy]# date +%F

2018-07-20

[root@oldboyedu50-lnb /oldboy]# date +%Y-%m-%d

2018-07-20

%T===%H:%M:%S    %T  %H:%M:%S    ::

[root@oldboyedu50-lnb /oldboy]# date +%T

02:29:22

[root@oldboyedu50-lnb /oldboy]# date +%H:%M:%S

02:29:46

%w              周幾

[root@oldboyedu50-lnb /oldboy]# date +%w

5

1.5.2 根據你的描述顯示指定日期

-d    '-7day'  7天之前

-d    '7day'   7天之後

-d '  '+7day'  7天之後

1.5.3 修改時間

date -s 命令,手動設置命令,

 [root@znix ~]# date -s "20170101 11:41:00"

Sun Jan  1 11:41:00 CST 2017

1.5.4 自動同步系統時間

ntpdate 聯網同步主機時間。

[root@znix ~]# ntpdate  ntp1.aliyun.com

 4 Sep 15:17:22 ntpdate[11593]: step time server 182.92.12.11 offset 27.049824 sec


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