grep
是一个强大的文本搜索工具,它使用正则表达式来匹配行。它是GNU项目的一部分,并且广泛应用于Unix和类Unix操作系统中,包括Linux。grep
代表“Global Regular Expression Print”,意思是全局正则表达式打印。
基本语法
grep [选项] 模式 [文件...]
grep [选项] [-e 模式 | -f 文件] [文件...]
常用选项
模式选择
-E, --extended-regexp
:使用扩展正则表达式(ERE)-F, --fixed-strings
:将模式视为固定字符串而非正则表达式-G, --basic-regexp
:使用基本正则表达式(BRE),这是默认值-P, --perl-regexp
:使用Perl兼容正则表达式(PCRE)
匹配控制
-e 模式, --regexp=模式
:指定匹配模式-f 文件, --file=文件
:从文件中读取模式-i, --ignore-case
:忽略大小写-v, --invert-match
:反向匹配,选择不匹配的行-w, --word-regexp
:匹配整个单词-x, --line-regexp
:匹配整行
输出控制
-c, --count
:只显示匹配行的计数--color[=WHEN]
:高亮显示匹配文本(WHEN可以是never、always或auto)-l, --files-with-matches
:只显示包含匹配项的文件名-L, --files-without-match
:只显示不包含匹配项的文件名-m NUM, --max-count=NUM
:最多匹配NUM行后停止-o, --only-matching
:只显示匹配的部分-q, --quiet, --silent
:静默模式,不输出任何内容
上下文控制
-A NUM, --after-context=NUM
:显示匹配行后的NUM行-B NUM, --before-context=NUM
:显示匹配行前的NUM行-C NUM, --context=NUM
:显示匹配行前后的NUM行
文件选择
-a, --text
:将二进制文件视为文本文件-r, --recursive
:递归读取目录下的所有文件-R, --dereference-recursive
:递归读取目录并跟随符号链接--include=GLOB
:只搜索匹配GLOB模式的文件--exclude=GLOB
:跳过匹配GLOB模式的文件--exclude-dir=DIR
:递归搜索时跳过指定目录
行前缀控制
-b, --byte-offset
:显示匹配行/模式的字节偏移量-H, --with-filename
:显示文件名(默认多文件时启用)-h, --no-filename
:不显示文件名(默认单文件时启用)-n, --line-number
:显示行号-T, --initial-tab
:对齐输出(与-H/-n/-b一起使用时)
正则表达式语法
基本语法
.
:匹配任意单个字符[abc]
:匹配a、b或c中的任意一个字符[^abc]
:匹配不在a、b或c中的任意字符[a-z]
:匹配a到z范围内的任意字符^
:匹配行首$
:匹配行尾
重复匹配
?
:前一项可选,最多匹配一次*
:前一项匹配零次或多次+
:前一项匹配一次或多次{n}
:前一项精确匹配n次{n,}
:前项匹配至少n次{n,m}
:前项匹配n到m次
特殊字符类
\w
:匹配单词字符(等同于[[:alnum:]_]
)\W
:匹配非单词字符\s
:匹配空白字符\S
:匹配非空白字符\d
:匹配数字(等同于[0-9]
)\D
:匹配非数字
使用示例
基本搜索
# 在文件中搜索包含"hello"的行
grep "hello" file.txt
# 忽略大小写搜索
grep -i "hello" file.txt
# 搜索整个单词
grep -w "hello" file.txt
多文件搜索
# 在当前目录所有.txt文件中搜索
grep "pattern" *.txt
# 递归搜索目录
grep -r "pattern" /path/to/dir
使用正则表达式
# 搜索以"start"开头的行
grep "^start" file.txt
# 搜索以"end"结尾的行
grep "end$" file.txt
# 搜索包含"error"或"warning"的行
grep -E "error|warning" file.log
上下文显示
# 显示匹配行及其后2行
grep -A 2 "pattern" file.txt
# 显示匹配行及其前后3行
grep -C 3 "pattern" file.txt
高级用法
# 只显示匹配的文件名
grep -l "pattern" *.txt
# 统计匹配行数
grep -c "pattern" file.txt
# 从文件中读取搜索模式
grep -f patterns.txt file.txt
# 高亮显示匹配结果
grep --color=auto "pattern" file.txt
环境变量
GREP_OPTIONS
:指定默认选项GREP_COLOR
:指定匹配文本高亮颜色LC_ALL
,LC_CTYPE
,LANG
:影响字符处理方式POSIXLY_CORRECT
:启用POSIX兼容模式
退出状态
- 0:找到匹配行
- 1:未找到匹配行
- 2:发生错误
注意事项
- 使用特殊字符时可能需要转义
- 递归搜索大目录可能耗时较长
- 复杂正则表达式可能导致性能问题
- 二进制文件中搜索可能产生意外结果