grep命令详解

grep命令

1 命令选项
grep [op]... parttern [file]...
选项:
-c 只显示符合条件的'行数'
-d|-r:递归查找目录下所有文件。。。
-E 使用'扩展正则'  相当于命令'egrep'
-e 多个匹配条件'逻辑或'
-f 匹配条件非常多时,写在文件中,然后使用'-f file',表示同时启用所有条件【关系为逻辑或】
-i 忽略大小写
-n 在匹配结果前显示每一行的'行号
-o 只显示'keyword'【默认显示'包含keyword的行'】
-q 执行命令但'不输出结果',常用于脚本条件判断
-v 取反,排除匹配结果,只显示'不符合条件的行
-w key :精确匹配单词key,'相当于词首词尾锚定'

ABC匹配结果附带前后行一起输出

-A 表示附带后面N行
-B 表示附带前面N行 
-C = '-A' + '-B'

范例:

# 选项加上-n是为了证实确实是匹配结果的后面3行
[15:12:09root@CentOS8/~]# grep root -nA3 /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
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
--
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:65534:65534:Kernel Overflow User:/:/sbin/nologin

=

2 排除过滤

grep默认只显示【符合条件的行】,- v 选项只显示【不符合条件的行】

[11:52:17root@CentOS8/~]# grep -v root /etc/passwd
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
.......

=

**忽略大小写- i **

grep默认大小写敏感,- i 选项忽略大小写

[14:02:53root@CentOS8/~]# grep ROOT /etc/passwd    #不加选项无输出结果
[14:07:15root@CentOS8/~]# grep -i ROOT /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

=

**显示行号 -n **:

  • 文本过多时,显示行号方便查看
  • 显示匹配结果在原文中的行号
[14:07:23root@CentOS8/~]# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

**显示行数量 - c **, 只显示有多少行符合条件

[14:48:55root@CentOS8/~]# grep -c root /etc/passwd
2

=

3 keywords

- o 只显示keywords:- o 只显示所有匹配的内容,可知keywords数量

[15:05:16root@CentOS8/~]# grep -o root /etc/passwd
root
root
root
root

=

静默模式:- q 选项执行命令但不输出结果,常用于脚本条件判断

# 执行后查看 $? 变量可知是否匹配。 $?=0表示有匹配结果

范例

[15:07:09root@CentOS8/~]# grep aaaaa -q /etc/passwd
[15:11:52root@CentOS8/~]# echo $?
1   # 表示无法匹配到'aaaaa'

[15:12:00root@CentOS8/~]# grep root -q /etc/passwd
[15:12:07root@CentOS8/~]# echo $?
0

=

4 逻辑或

选项 - e 多个条件满足其一几个条件就有几次 - e
注意区别: - E 表示使用正则表达式

逻辑或范例

[15:17:15root@CentOS8/~]# grep -e root -e jack  /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
jacklee:x:1000:1000:jacklee:/home/jacklee:/bin/bash
[15:19:46root@CentOS8/~]# grep -e root -e aaaa  /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

若过滤规则过多,将其写在文件中使用选项 - f 进行匹配(逻辑 = 或)
因为太多 - e 写起来太麻烦

[15:34:59root@CentOS8/data]# cat a.txt 
root
body
system

[15:35:01root@CentOS8/data]# grep -f a.txt /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin

选项 - f 功能的拓展:用于取两文件的相同行(特定的文件内容,实际上还是上一条的功能)

[root@centos8/~]# grep -f jackA jackA.orig 
2020-01
2020-02
2020-04
2020-05
2020-07
2020-08

=

5 逻辑与

**使用管道而不是 - e **

[15:26:01root@CentOS8/~]# grep root /etc/passwd | grep bash
root:x:0:0:root:/root:/bin/bash
[15:26:15root@CentOS8/~]# grep root /etc/passwd | grep aaaaa  # 无结果
[15:26:25root@CentOS8/~]#    

=

6 单词锚定

选项 - w 精确匹配单个单词
单词判断依据——字母数字下划线连续组合都视为单词
单词判断依据——字母数字下划线连续组合都视为单词
单词判断依据——字母数字下划线连续组合都视为单词

注意:仍然是匹配整行,区别keyword

[15:26:25root@CentOS8/~]# grep  jack  /etc/passwd
jacklee:x:1000:1000:jacklee:/home/jacklee:/bin/bash    # 包含jack有结果
[15:29:21root@CentOS8/~]# grep  -w jack  /etc/passwd   # 指定jack无结果
[15:29:38root@CentOS8/~]# grep  -w jacklee  /etc/passwd
jacklee:x:1000:1000:jacklee:/home/jacklee:/bin/bash

=

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值