1 多个关键字查找
1.1 关键字间 or
i. 使用-e
- #包含了string.h或者stdlib.h的头文件
- grep -l -e 'string.h' -e 'stdlib.h' /usr/include/*.h
ii. 使用元字符 |
- grep 'strint.h|stdlib.h' /usr/include/*.h
- #使用-E 看着舒服
- grep -E 'string.h|stdlig.h' /usr/include/*.h
- cat >multi_pattern
- stdlib.h
- string.h
- grep -l -f multi_pattern /usr/include/*.h
1.2 关键字间 and
i. 通过管道
- #同时包含'hello','world'的行
- echo hello world | grep '<hello>' | grep '<world>'
- grep -E 'pattern1.*pattern2|pattern2.*pattern1'
2. 单词匹配
i. -w(gnu 选项)
- grep -w 'main' /usr/include/*.h
ii. <>
- grep '<main>' /usr/include/*.h
3.善用 -E
-E选项启用 extended expression,正则写起来更加灵活
- #查看gcc帮助文件里两个the/that/and/or连在一起的行
- man gcc | grep -E '(<the>|<that>|<and>|<or>) 1'
- man gcc | grep -E -w '(the|that|and|or) 1'
- #查看gcc帮助文件里含两个连续单词的行
- man gcc | grep -E -w '([a-zA-Z]+) 1'
4 忽略大小写 -i
- #查看INT_MAX的值
- grep -i 'int_max' /usr/include/limits.h
- #匹配连续相同单词
- echo 'it IT' | grep -i -w -E '([a-z]+) 1'
- echo 'it IT' | grep -E -w '([a-zA-Z]+) 1'
有的时候不要光图方便会不准确。
5 递归查找 -r(posix 未说明)
- #查看日志的错误信息
- grep -i -w -r -E 'error|failed|failure' /var/log |less
6 显示匹配行周围行 (posix 未说明)
B/A/C(before/after/context)
-B n
-A n
-C n
7 取反-v
- grep -v -w 'hello' filename
8 匹配数 -c
- echo aaaa | grep -c 'a'
9 输出文件名 -l
- grep -l -r -i -w 'filename_max' /usr/include/*.h
10 只输出匹配部分-o (gnu 选项)
- echo abcddf |grep -o 'dd'