文档处理三贱客 -- 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
测试用例
# 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
浙公网安备 33010602011771号