grep 是强大的文本搜索工具,使用正则表达式在文件中搜索匹配模式。
grep 在输入中搜索匹配指定模式的行并输出。它支持基本正则表达式(BRE)、扩展正则表达式(ERE)和固定字符串匹配。grep 是命令行中最重要的工具之一。
示例 1:在文件中搜索字符串
grep "error" application.log
2024-08-19 08:15:22 ERROR Database connection failed
2024-08-19 08:16:30 ERROR Retry attempt 1 failed
2024-08-19 08:17:45 ERROR Retry attempt 2 failed
示例 2:忽略大小写搜索
grep -i "warning" build.log
示例 3:递归搜索目录中的所有文件
grep -r "function main" project/
project/src/main.py:def main():
project/tests/test_main.py:def test_main():
示例 4:显示匹配行号
grep -n "TODO" src/*.py
src/main.py:23: # TODO: Implement error handling
src/utils.py:45: # TODO: Optimize this function
示例 5:使用正则表达式
grep -E "ERROR|FATAL" application.log
示例 6:只显示不匹配的行
grep -v "^#" config.ini
示例 7:统计匹配行数
grep -c "error" application.log
15
示例 8:只输出匹配的部分
grep -o "version=[0-9.]+" setup.py
示例 9:匹配整个单词
grep -w "main" program.c
| 参数 | 长参数 | 说明 |
|---|---|---|
-i |
--ignore-case |
忽略大小写 |
-v |
--invert-match |
输出不匹配的行 |
-n |
--line-number |
显示行号 |
-c |
--count |
只输出匹配行数 |
-r |
--recursive |
递归搜索目录 |
-l |
--files-with-matches |
只输出包含匹配的文件名 |
-L |
--files-without-match |
只输出不包含匹配的文件名 |
-w |
--word-regexp |
匹配整个单词 |
-x |
--line-regexp |
匹配整行 |
-E |
--extended-regexp |
使用扩展正则表达式(支持 |、+、? 等) |
-F |
--fixed-strings |
使用固定字符串匹配(不解释正则) |
-P |
--perl-regexp |
使用 Perl 兼容正则表达式(PCRE) |
-o |
--only-matching |
只输出匹配的部分 |
-A N |
--after-context=N |
显示匹配行之后的 N 行 |
-B N |
--before-context=N |
显示匹配行之前的 N 行 |
-C N |
--context=N |
显示匹配行前后的 N 行 |
-H |
--with-filename |
显示文件名(多文件时默认行为) |
-h |
--no-filename |
不显示文件名 |
-q |
--quiet |
静默模式,不输出任何内容(用于脚本判断) |
-s |
--no-messages |
抑制错误消息 |
-m N |
--max-count=N |
每个文件最多输出 N 个匹配 |
--color |
高亮显示匹配内容 | |
--include=PATTERN |
只搜索匹配模式的文件(如 --include='*.py') |
|
--exclude=PATTERN |
排除匹配模式的文件 | |
--exclude-dir=PATTERN |
排除匹配模式的目录 |