详细说明参考: man 1 grep
,建议将选项写在前面。
1
2
3
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] -e PATTERN ... [FILE...]
grep [OPTIONS] -f FILE ... [FILE...]
使用正则表达式
使用 -E
参数
grep -E "^---$" ${FILE}
反转匹配模式
正常是显示含有匹配内容的行,可以使用 -v
参数反转,显示那些没有匹配内容的行。
忽略大小写
使用 -i
参数即可
指定最大match次数
使用 -m NUM
参数,在一个文件匹配到指定次数后就退出。
grep -m 1 "abc" ${FILE}
只匹配第一个
显示行号
使用 -n
参数,如果只需要获得行号,可以配合使用awk工具实现
递归查找文件夹
使用 -r
参数
排除文件夹
使用 --exclude-dir=[GLOB]
,可以添加多个,是支持通配符的!
静默模式
使用 -q, --quiet, --silent
参数,不显示结果,静默退出,适合用在脚本中 Quiet; do not write anything to standard output. Exit immediately with zero status if any match is found, even if an error was detected. Also see the -s or –no-messages option.
仅显示匹配的文件名
适合在查找批量文件时使用,显示其中含有匹配内容的文件名。 使用-l
参数,还有一个 -L
参数,是相反的效果,显示没有匹配内容的文件名
1
2
grep -l "hello" ./a.txt ./b.txt ./c/*
grep -l "hello" -r ./*
显示文件中的空行
可以这样使用
1
grep -E "^$" ./a.txt
匹配多个内容
1
2
3
grep -e "contexta" -e "context2" ./xxxfile
grep "contexta\|contextb" ./xxxfile
grep -E "contexta|contextb" ./xxxfile
注意,使用-E和不使用-e是有差别的,一些字符会转义。
显示匹配的次数
一个文件中有多行匹配内容时,获取匹配的行数。使用-c
参数
1
2
grep -c "hello" ./a.txt
1
显示匹配行前后N行
有时找到了匹配行,希望跟着打印匹配行和后面紧跟的几行。
有三个参数,
-A NUM
:A=after,显示匹配行及后面的n行-B NUM
:B=before,显示匹配行及前面的n行-C NUM
:C=context,显示匹配行前后的各n行