文本三剑客之grep
grep全称是Global Regular Expression Print,是一个强大的文本搜索工具,可以根据指定模式来匹配以输出符合要求的字符串。
1.常用的命令参数
-q 或 —quiet或—silent : 不显示任何信息
-i 或 —ignore-case : 忽略字符大小写的差别。
-c 或 —count : 计算符合样式的列数。
A<显示行数> 或 —after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容
-B<显示行数> 或 —before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
-C<显示行数> 或 —context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
2.1统计匹配的行数
2例如统计/etc/passwd中nologin的用户数 一般nologin的为系统的服务用户。
root@localhost:~# grep -c nologin /etc/passwd
17
统计/etc/passwd 中开头是 root 的用户
root@localhost:~# grep -c ^root /etc/passwd
1
2.2忽略大小写
忽略大小写,查找出/etc/passwd 名为network 字段。
root@localhost:~# grep -i network /etc/passwd*
/etc/passwd:systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
/etc/passwd-:systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
2.3显示行数
搜索root用户所为的行数。
root@localhost:~# grep -n ^root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
2.4搜索上下文的行数内容
搜索字符串附近的内容,
1.A{NUM],A 代表After,打印匹配的行及其下面x行。
查找root用户字符串下面的一行
root@localhost:~# grep -A1 ^uuidd /etc/passwd
uuidd:x:108:112::/run/uuidd:/bin/false
dnsmasq:x:109:65534:dnsmasq,,,:/var/lib/misc:/bin/false
2.B{NUN},B代表Before,打印匹配的行及其上面X行。
查找uuidd用户字符串上面的一行
root@localhost:~# grep -B1 ^uuidd /etc/passwd
messagebus:x:107:111::/var/run/dbus:/bin/false
uuidd:x:108:112::/run/uuidd:/bin/false
3.C{NUM],打印匹配的行及其上面的x行和下面x行
root@localhost:~# grep -C1 ^uuidd /etc/passwd
messagebus:x:107:111::/var/run/dbus:/bin/false
uuidd:x:108:112::/run/uuidd:/bin/false
dnsmasq:x:109:65534:dnsmasq,,,:/var/lib/misc:/bin/false
3.1静默模式
查找指定的字符串是否有匹配,但并不关心具体的输出。选项-q表示进入静默模式,它不会产出输出,通过返回值表示匹配结果。返回值为0说明有匹配对象,返回值为1说明没有匹配对象。静默模式在代码中常用到,它可以避免屏幕中的无效输出。
查找lsmod中已载入的系统模块有没有xen
root@localhost:~# lsmod |grep xen
xenfs 16384 1
xen_privcmd 16384 1 xenfs
root@localhost:~# lsmod |grep xen -q
root@localhost:~# echo $?
0
以上返回0 则是说明有xen的模块
3.2匹配的文件对象
查找那些文件有匹配的字符串,应当使用选项-l来实现。
那些文件有 root字符串的文件
root@localhost:/etc# grep -l ^root /etc/*
/etc/group
/etc/group-
/etc/gshadow
/etc/gshadow-
/etc/passwd
/etc/passwd-
/etc/services
/etc/subgid
/etc/subgid-
/etc/subuid
/etc/subuid-
/etc/sudoers
3.3递归目录
查找某个目录下面连同子目录下面的所有文件的字符串,需要使用递归选项-r,就想下面的一样。
查找/etc/systemd目录下面带有root的文件
root@localhost:/etc# grep -r root /etc/systemd
/etc/systemd/logind.conf:#KillExcludeUsers=root
睿江云官网链接:www.eflycloud.com