7-2.文件处理工具之grep案例分析

1.显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)

案例思路
分析:首先大小s,我们可以想到-i忽略大小选项,s开头的行可以用行首锚定符^,用"."代表s后面的任意字符,用"*"表示前面点字符重复不确定次数。

[root@localhost data]# grep -in '^s.*' /proc/meminfo 
6:SwapCached:            0 kB
15:SwapTotal:       4194300 kB
16:SwapFree:        4194300 kB
21:Shmem:              9724 kB
22:Slab:              93044 kB
23:SReclaimable:      40760 kB
24:SUnreclaim:        52284 kB
[root@localhost data]# grep -Ein '^(S|s)' /proc/meminfo 
6:SwapCached:            0 kB
15:SwapTotal:       4194300 kB
16:SwapFree:        4194300 kB
21:Shmem:              9724 kB
22:Slab:              93012 kB
23:SReclaimable:      40760 kB
24:SUnreclaim:        52252 kB

2.显示/etc/passwd文件中不以/bin/bash结尾的行

案例思路
分析:以/bin/bash结尾的行,我们可以使用行尾锚定符$来实现,而题目结果是不以/bin/bash结尾的行,那么只要使用-v显示不被pattern匹配到的行就可以了。

[root@localhost data]# grep -nv '/bin/bash$' /etc/passwd
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
18:postfix:x:89:89::/var/spool/postfix:/sbin/nologin

3.显示用户rpc默认的shell程序

案例思路
分析:显示用户rpc,那么就是以r开头,c结尾,可以使用行首锚定符^,结尾部分用词尾锚定>,那么这样就可以找出符合要求的用户的,再通过cut取列就能拿到该用户的shell程序。

[root@localhost data]# grep '^rpc\>' /etc/passwd|cut -d":" -f7
/bin/bash

4.找出/etc/passwd中的两位或三位数

案例思路
分析:匹配任意数字可以使用[0-9]来实现,而两位或三位数,我们首先想到用{m,n}这个实现,数字开头和结尾可以用词首和词尾来锚定。

[root@localhost data]# grep "\<[0-9]\{2,3\}\>" /etc/passwd
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

5.显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行

案例思路
分析:匹配空白字符,首先我们想到有个[:space:],这个可以匹配水平和垂直的空白字符,而非空白字符则可以加上来实现,至少一个,那么可以用使用+匹配其前面的字符至少1次,字符开头使用行首锚定符来实现。

[root@localhost data]# grep -on "^[[:space:]]\+[^[:space:]]\+" /etc/grub2.cfg|head
12:  load_env
15:   set
16:   set
17:   save_env
18:   set
20:   set
24:  menuentry_id_option="--id"
26:  menuentry_id_option=""
32:  set
33:  save_env

6.找出“netstat -tan” 命令结果中以LISTEN后跟任意多个空白字符结尾的行

案例思路
分析:以多个空白字符结尾的行,可以使用[[:space:]]*$来匹配,-E使用扩展正则。

[root@localhost data]# netstat -tan |grep -En '(LISTEN[[:space:]]*)$'
3:tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
4:tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
6:tcp6       0      0 :::22                   :::*                    LISTEN     
7:tcp6       0      0 ::1:25                  :::*                    LISTEN

7.显示CentOS7上所有UID小于1000以内的用户名和UID

案例思路
分析:首先显示用户名和UID,我们想到用cut命令,可以按列把用户名和UID取出来,然后小于1000以内的UID,用{m,n}表示取数范围。

[root@localhost data]# cat /etc/passwd|cut -d: -f1,3 | grep "\<[0-9]\{,3\}\>"
root:0
bin:1
daemon:2
adm:3
lp:4
sync:5
shutdown:6
halt:7
mail:8
operator:11
games:12
ftp:14
nobody:99
systemd-network:192
dbus:81
polkitd:999
sshd:74
postfix:89

8.添加用户bash、 testbash、 basher、 sh、 nologin(其shell为/sbin/nologin),找出/etc/passwd用户名和shell同名的行

案例思路
分析:

useradd bash -s /sbin/nologin 
useradd testbash -s /sbin/nologin
useradd basher -s /sbin/nologin
useradd sh -s /sbin/nologin 
useradd nologin -s /sbin/nologin
[root@localhost data]# grep "^\(.*\)\>.*\1\>$" /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
nologin:x:1006:1006::/home/nologin:/sbin/nologin

9.利用df和grep,取出磁盘各分区利用率,并从大到小排序

案例思路
分析:首先用^/dev/sd匹配出各个磁盘分区,然后用[0-9]+%匹配出各个磁盘分区的利用率,最后用sort进行排序。

[root@localhost data]# df -h|grep "^/dev/sd"|grep -o "[0-9]\+%"|sort -nr
13%
2%
1%
posted @ 2020-08-05 16:45  人生值得  阅读(263)  评论(0编辑  收藏  举报