提醒:本文为合集文章,后续会持续更新!
关注我,每日提升!
阿铭在前面多次用到了grep命令,可见它的重要性。该命令的格式为:grep [-cinvABC] 'word' filename,其常用的选项如下所示。
- -c:表示打印符合要求的行数。
- -i:表示忽略大小写。
- -n:表示输出符合要求的行及其行号。
- -v:表示打印不符合要求的行。
- -A:后面跟一个数字(有无空格都可以),例如-A2表示打印符合要求的行以及下面两行。
- -B:后面跟一个数字,例如-B2表示打印符合要求的行以及上面两行。
- -C:后面跟一个数字,例如-C2表示打印符合要求的行以及上下各两行。
首先看看-A、-B和-C这3个选项的用法。
-A2 会把包含halt的行以及这行下面的两行都打印出来:
# grep -A2 'halt' /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
说明:在Rocky8系统中,grep默认帮我们把匹配到的字符串标注了红色,这点还是挺贴心的。其实大家可以用which命令看一下grep,你会发现grep其实是grep --color=auto,这个选项就是颜色显示。
-B2 会把包含halt的行以及这行上面的两行都打印出来:
# grep -B2 'halt' /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
-C2 会把包含halt的行以及这行上下各两行都打印出来:
# grep -C2 'halt' /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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
下面阿铭举几个典型实例来帮你更深刻地理解grep。
12.1.1 过滤出带有某个关键词的行,并输出行号
示例命令如下:
# grep -n 'root' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
说明 前面的数字显示为绿色,表示行号。
12.1.2 过滤出不带有某个关键词的行,并输出行号
示例命令如下:
# grep -nv 'nologin' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
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
45:aminglinux:x:1000:1000:aminglinux:/home/aminglinux:/bin/bash
12.1.3 过滤出所有包含数字的行
示例命令如下:
# grep '[0-9]' /etc/inittab
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
说明 只要有一个数字就算匹配到了。
12.1.4 过滤出所有不包含数字的行
示例命令如下:
# grep -v '[0-9]' /etc/inittab
# inittab is no longer used.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
说明:和上一例的结果正好相反,只要是包含一个数字,就不显示。
12.1.5 过滤掉所有以#开头的行
操作样例文档/etc/sos.conf的内容如下:
[plugins]
#disable = rpm, selinux, dovecot
[tunables]
#rpm.rpmva = off
#general.syslogsize = 15
# grep -v '^#' /etc/sos.conf
[plugins]
[tunables]
说明:这里面是含有空行的。
那如何将空行删除呢?示例命令如下:
# grep -v '^#' /etc/sos.conf |grep -v '^