首页 > 代码库 > Linux_第三关练习题_1,3

Linux_第三关练习题_1,3

1.如何取得/etc/hosts 文件的权限对应的数字内容,如-rw-r--r-- 为 644,要求使用命令取得 644 这样的数字。 

  解法a:使用sed+awk命令:

[root@xiaoming 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
[root@xiaoming data]# stat /etc/hosts|sed -n ‘4p‘  #使用sed取出第四行   Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
[root@xiaoming data]# stat /etc/hosts|sed -n ‘4p‘|awk -F"[(0/]" ‘{print $3}‘
  644  #使用awk指定分隔符为‘( 0 /‘;再打印分割后的第三列,完成需求。

   解法b:使用awk命令:

[root@xiaoming 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
[root@xiaoming data]# stat /etc/hosts|awk -F"[(0/]" ‘NR==4{print $3}‘  
  644  #使用awk指定分割符为‘( 0 /’;再打印出分割后的第四行的第三列内容,完成需求。

  解法c:使用sed+正则表达式:

[root@xiaoming data]# stat /etc/hosts|sed -n ‘4p‘
  Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
[root@xiaoming data]# stat /etc/hosts|sed -n ‘4p‘|sed -r ‘s#.*s: \(0|/-.*##g‘
  644  #使用正则表达式 .*s: \(0|/.* 匹配目标前后的字段,并把匹配的结果替换为空。

 

 

3.请执行命令取出 linux 中 eth0 的 IP 地址。

  解法a:使用sed+cut命令

[root@xiaoming data]# ifconfig eth0|sed -n ‘2p‘
          inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
[root@xiaoming data]# ifconfig eth0|sed -n ‘2p‘|cut -d " " -f12    #指定空格为分隔符
addr:10.0.0.200
[root@xiaoming data]# ifconfig eth0|sed -n ‘2p‘|cut -d " " -f12|cut -d ":" -f2  #指定冒号为分隔符
10.0.0.200

 缺点:使用多条管道,性能低下。

  解法b:使用awk+正则表达式

[root@xiaoming data]# ifconfig eth0|awk -F"[ :]+" ‘{print $4}‘  #指定分隔符为1个或多个空格或者一个或多个冒号;并打印出目标列。
Ethernet
10.0.0.200
fe80
RUNNING
77689
51859
txqueuelen
8943514

[root@xiaoming data]# ifconfig eth0|awk -F"[ :]+" ‘NR==2{print $4}‘  #定位到目标行。
10.0.0.200

 优点:简洁、优雅。

  解法c:使用sed+正则表达式

[root@xiaoming data]# ifconfig eth0|sed -n 2p
          inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
[root@xiaoming data]# ifconfig eth0|sed -n 2p|sed -r s#.*r:|B.*##g
10.0.0.200 

 

----------------------------------------分割线---------------------------------

参考:

  1. 李泳宜-预习视频
  2. https://deerchao.net/tutorials/regex/regex.htm

Linux_第三关练习题_1,3