
前言
grep 是 Linux 三剑客(grep, sed, awk)之一,用于在文件中搜索特定的文本模式。它不仅功能强大,而且非常灵活,能够处理各种文本搜索需求。下文我们梳理 grep 命令的详细用法及进阶示例。
基本用法
基本搜索
| |
用于在 filename 文件中搜索包含 pattern 的行,并打印出来。
忽略大小写
| |
使用 -i 选项忽略大小写。
递归搜索
| |
在 directory 目录及其子目录中递归搜索包含 pattern 的文件内容。
显示行号
| |
使用 -n 选项显示匹配行的行号。
反向搜索(显示不匹配的行)
| |
使用 -v 选项显示不包含 pattern 的行。
显示文件名
| |
当搜索多个文件时,默认会显示匹配的文件名。使用 -H 可以强制显示文件名,使用 -h 可以隐藏文件名。
进阶用法
使用正则表达式
| |
使用 -E 选项支持扩展正则表达式,例如 | 表示或操作。
计数匹配的行数
| |
使用 -c 选项统计匹配的行数。
只显示匹配的部分
| |
使用 -o 选项只显示匹配的部分,而不是整行内容。
前后行显示
| |
-A, -B, -C 选项分别用于显示匹配行之后、之前或前后的指定行数。
从标准输入读取数据
| |
grep 可以从标准输入读取数据,这在管道操作中非常有用。
使用固定字符串搜索(提高性能)
| |
使用 -F 选项将 pattern 视为固定字符串而非正则表达式,可以提高搜索性能。
排除文件
| |
使用 --exclude 选项排除特定类型的文件。
使用 Perl 兼容正则表达式
| |
使用 -P 选项启用 Perl 兼容正则表达式,例如 \d+ 表示一个或多个数字。
零宽断言
| |
使用 Perl 兼容正则表达式支持零宽断言,例如 (?<=foo)bar 匹配前面是 foo 的 bar。
组合使用示例
查找特定目录中的特定类型文件并搜索内容
| |
在 /path/to/directory 目录中递归搜索所有 .py 文件,查找包含 import 的行。
查找并显示匹配行及其前后两行
| |
在 /var/log/syslog 文件中查找包含 error 的行,并显示其前后两行。
统计包含特定单词的文件数量
| |
在 /path/to/directory 目录中递归搜索包含 word 的文件,并统计文件数量。
结语
通过这些示例,可以体会到 grep 的强大能力和灵活性,也让它成为Linux中最实用的文本处理工具之一。
