文档处理三贱客 -- grep

grep命令是文本搜索命令,支持正则表达式搜索文本,也可从一个文件中的内容作为搜索关键字。
grep在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。

grep 语法

grep [OPTIONS] PATTERN [FILE...]

grep [OPTIONS] [-e PATTERN]... [-f FILE]... [FILE...]

grep 参数详解

 

-A: 显示匹配行及后面多少行, 如: -A3, 则表示显示匹配行及后3行
-B: 显示匹配行及前面多少行, 如: -B3, 则表示显示匹配行及前3行
-C: 显示匹配行前后多少行,   如: -C3, 则表示显示批量行前后3行
-c: 计算找到 '搜寻字符串' 的行数
-e: 使用正则搜索
-E: 扩展正则匹配 等效 egrep
-f:从文件获取模式
-F: 匹配多字符串模式只能找固定的文本 等效 fgrep
-i: 不区分大小写
-v: 查找不包含指定内容的行
-w: 按单词搜索
-n: 显示行号
-o:仅显示匹配PATTERN的行的一部分
-r: 逐层遍历目录查找
-Num: 例如 -5 就是前后5行
--color: 匹配到的内容高亮显示
--include: 指定匹配的文件类型
--exclude: 过滤不需要匹配的文件类型
-I: 忽略二进制文件
-r -R: 递归查找
-h: 查询多文件时不显示文件名。
-L: 只输出匹配到的文件

 

grep 用法举例

测试文件

 1 # cat test.txt
 2 root:x:0:0:root:/root:/bin/bash
 3 bin:x:1:1:bin:/bin:/sbin/nologin
 4 daemon:x:2:2:daemon:/sbin:/sbin/nologin
 5 adm:x:3:4:adm:/var/adm:/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 operator:x:11:0:operator:/root:/sbin/nologin
10 nobody:x:99:99:Nobody:/:/sbin/nologin
11 dbus:x:81:81:System message bus:/:/sbin/nologin
12 vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
13 abrt:x:173:173::/etc/abrt:/sbin/nologin
14 haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
15 ntp:x:38:38::/etc/ntp:/sbin/nologin
16 saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
17 unbound:x:498:499:Unbound DNS resolver:/etc/unbound:/sbin/nologin
18 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
19 tcpdump:x:72:72::/:/sbin/nologin
20 admin:x:500:0::/home/admin:/bin/bash
21 mysql:x:501:501::/home/mysql:/sbin/nologin
22 redis:x:505:505::/home/redis:/bin/bash
23 www:x:506:506::/home/www:/bin/bash
24 opdoss:x:507:507::/home/opdoss:/bin/bash
View Code

 测试用例

# grep  -A 2 "sshd" test.txt    #找到包含字符串"sshd"的行及后两行
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
admin:x:500:0::/home/admin:/bin/bash

# grep  -B 2 "sshd" test.txt    #找到包含字符串"sshd"的行及前两行
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
unbound:x:498:499:Unbound DNS resolver:/etc/unbound:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

# grep  -C 2 "sshd" test.txt    #找到包含字符串"sshd"的行及前后两行
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
unbound:x:498:499:Unbound DNS resolver:/etc/unbound:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
admin:x:500:0::/home/admin:/bin/bash

# grep -c "root" test.txt    #统计包含字符串"root"的行数
2

# grep -e "/bin/bash$" test.txt   #统计以"/bin/bash" 结尾的行
root:x:0:0:root:/root:/bin/bash
admin:x:500:0::/home/admin:/bin/bash
redis:x:505:505::/home/redis:/bin/bash
www:x:506:506::/home/www:/bin/bash
opdoss:x:507:507::/home/opdoss:/bin/bash    


# cat 1.txt 
111
222
333
444
# cat 2.txt 
2222
333
4444
5555
# grep -f  1.txt 2.txt       #把1.txt 文件内容作为敏感词从2.txt过滤
2222
333
4444
# grep -v  -f  1.txt 2.txt    #取反
5555

# grep -i -w -o 'nobody' test.txt    #不区分大小写查找关键词
nobody
Nobody

# grep -n 'redis' test.txt    #输出行号      
21:redis:x:505:505::/home/redis:/bin/bash
View Code

 

posted on 2020-04-03 15:29  伊葭言  阅读(168)  评论(0)    收藏  举报