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