前言
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中最实用的文本处理工具之一。