目录
- 利用到的知识点
- 需求1
- 解法
- 需求2
- 解法
- 需求3
- 解法
- 需求4
- 解法
利用到的知识点
- 正则表达式
- 管道符
- sed反向引用
需求1
将/etc/passwd
的第一行的头和尾字段调换显示
解法
- 原始内容
head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
- 调换后
head -1 /etc/passwd | sed -r 's|(^root)(.*)(/bin/bash$)|\3\2\1|g'
/bin/bash:x:0:0:root:/root:root
需求2
将/etc/passwd
的行的头和尾字段调换显示
解法
- 原始内容
wc /etc/passwd34 69 1764 /etc/passwd
cat /etc/passwd | awk -F ':' '{print $2}' | uniq -c34 x
# 发现/etc/passwd的第二段都是x,所以第二段可以设置为:x开始,到:结束
- 调换后
[root@ecm ~]# head -5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin[root@ecm ~]# head -5 /etc/passwd | sed -r 's#(^.*)(:x.*:)(.*$)#\3\2\1#g'
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
需求3
获取网卡的ip地址,必须使用sed
解法
- 原始内容
ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether fa:16:3e:e9:95:58 brd ff:ff:ff:ff:ff:ffinet 10.0.0.124/24 brd 10.0.0.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet6 fe80::b791:7040:47e3:4e98/64 scope link noprefixroutevalid_lft forever preferred_lft forever# 仅需要第三行的10.0.0.124
- sed后
ip a s eth0 | sed -n '3p'| sed -r 's@^.*et (.*)/.*@\1@g'
10.0.0.124
#以下写法也可以,少了一个管道
ip a s eth0 | sed -nr '3 s@^.*et (.*)/.*@\1@g p'
10.0.0.124
需求4
使用sed获取stat /etc/passwd
中的权限
解法
- 原始内容
istat /etc/passwdFile: /etc/passwdSize: 1764 Blocks: 8 IO Block: 4096 regular file
Device: 253,1 Inode: 34068374 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2024-05-06 13:41:53.306830498 +0800
Modify: 2024-04-29 13:40:50.998782377 +0800
Change: 2024-04-29 13:40:50.999782397 +0800Birth: 2024-04-29 13:40:50.998782377 +0800# 仅需要第4行的0644
- sed后
stat /etc/passwd | sed -rn '4 s|^.*\(([0-9]+)/.*$|\1|g p'
0644