Linux_第三關練習題_1,3
1.如何取得/etc/hosts 文件的權限對應的數字內容,如-rw-r--r-- 為 644,要求使用命令取得 644 這樣的數字。
解法a:使用sed+awk命令:
[[email protected] data]# stat /etc/hosts #查看hosts詳細信息,權限信息在第四行。
File: `/etc/hosts‘ Size: 158 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 44 Links: 2 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-05-16 00:00:39.304004258 +0800
Modify: 2017-04-26 20:16:54.891279979 +0800 Change: 2017-04-26 20:16:54.892279979 +0800
[[email protected] data]# stat /etc/hosts|sed -n ‘4p‘ #使用sed取出第四行 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
[[email protected] data]# stat /etc/hosts|sed -n ‘4p‘|awk -F"[(0/]" ‘{print $3}‘
644 #使用awk指定分隔符為‘( 0 /‘;再打印分割後的第三列,完成需求。
解法b:使用awk命令:
[[email protected] data]# stat /etc/hosts
File: `/etc/hosts‘
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 44 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-05-16 00:00:39.304004258 +0800
Modify: 2017-04-26 20:16:54.891279979 +0800
Change: 2017-04-26 20:16:54.892279979 +0800
[[email protected]
解法c:使用sed+正則表達式:
[[email protected] data]# stat /etc/hosts|sed -n ‘4p‘ Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) [[email protected] data]# stat /etc/hosts|sed -n ‘4p‘|sed -r ‘s#.*s: \(0|/-.*##g‘ 644 #使用正則表達式 .*s: \(0|/.* 匹配目標前後的字段,並把匹配的結果替換為空。
3.請執行命令取出 linux 中 eth0 的 IP 地址。
解法a:使用sed+cut命令
[[email protected] data]# ifconfig eth0|sed -n ‘2p‘ inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [[email protected] data]# ifconfig eth0|sed -n ‘2p‘|cut -d " " -f12 #指定空格為分隔符 addr:10.0.0.200 [[email protected] data]# ifconfig eth0|sed -n ‘2p‘|cut -d " " -f12|cut -d ":" -f2 #指定冒號為分隔符 10.0.0.200
缺點:使用多條管道,性能低下。
解法b:使用awk+正則表達式
[[email protected] data]# ifconfig eth0|awk -F"[ :]+" ‘{print $4}‘ #指定分隔符為1個或多個空格或者一個或多個冒號;並打印出目標列。 Ethernet 10.0.0.200 fe80 RUNNING 77689 51859 txqueuelen 8943514 [[email protected] data]# ifconfig eth0|awk -F"[ :]+" ‘NR==2{print $4}‘ #定位到目標行。 10.0.0.200
優點:簡潔、優雅。
解法c:使用sed+正則表達式
[[email protected] data]# ifconfig eth0|sed -n ‘2p‘ inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [[email protected] data]# ifconfig eth0|sed -n ‘2p‘|sed -r ‘s#.*r:|B.*##g‘ 10.0.0.200
----------------------------------------分割線---------------------------------
參考:
- 李泳宜-預習視頻
- https://deerchao.net/tutorials/regex/regex.htm
Linux_第三關練習題_1,3