Featured image of post 测试工程师进阶必学 - Linux三剑客(grep)

测试工程师进阶必学 - Linux三剑客(grep)

前言

grep 是 Linux 三剑客(grep, sed, awk)之一,用于在文件中搜索特定的文本模式。它不仅功能强大,而且非常灵活,能够处理各种文本搜索需求。下文我们梳理 grep 命令的详细用法及进阶示例。

基本用法

基本搜索

1
grep "pattern" filename

用于在 filename 文件中搜索包含 pattern 的行,并打印出来。

忽略大小写

1
grep -i "pattern" filename

使用 -i 选项忽略大小写。

递归搜索

1
grep -r "pattern" directory

directory 目录及其子目录中递归搜索包含 pattern 的文件内容。

显示行号

1
grep -n "pattern" filename

使用 -n 选项显示匹配行的行号。

反向搜索(显示不匹配的行)

1
grep -v "pattern" filename

使用 -v 选项显示不包含 pattern 的行。

显示文件名

1
grep "pattern" file1 file2 file3

当搜索多个文件时,默认会显示匹配的文件名。使用 -H 可以强制显示文件名,使用 -h 可以隐藏文件名。

进阶用法

使用正则表达式

1
grep -E "pattern1|pattern2" filename

使用 -E 选项支持扩展正则表达式,例如 | 表示或操作。

计数匹配的行数

1
grep -c "pattern" filename

使用 -c 选项统计匹配的行数。

只显示匹配的部分

1
grep -o "pattern" filename

使用 -o 选项只显示匹配的部分,而不是整行内容。

前后行显示

1
2
3
grep -A 3 "pattern" filename  # 显示匹配行及其后3行
grep -B 3 "pattern" filename  # 显示匹配行及其前3行
grep -C 3 "pattern" filename  # 显示匹配行及其前后各3行

-A, -B, -C 选项分别用于显示匹配行之后、之前或前后的指定行数。

从标准输入读取数据

1
echo "some text" | grep "pattern"

grep 可以从标准输入读取数据,这在管道操作中非常有用。

使用固定字符串搜索(提高性能)

1
grep -F "fixed_string" filename

使用 -F 选项将 pattern 视为固定字符串而非正则表达式,可以提高搜索性能。

排除文件

1
grep -r --exclude="*.log" "pattern" directory

使用 --exclude 选项排除特定类型的文件。

使用 Perl 兼容正则表达式

1
grep -P "\d+" filename

使用 -P 选项启用 Perl 兼容正则表达式,例如 \d+ 表示一个或多个数字。

零宽断言

1
grep -P '(?<=foo)bar' filename

使用 Perl 兼容正则表达式支持零宽断言,例如 (?<=foo)bar 匹配前面是 foobar

组合使用示例

查找特定目录中的特定类型文件并搜索内容

1
grep -r --include="*.py" "import" /path/to/directory

/path/to/directory 目录中递归搜索所有 .py 文件,查找包含 import 的行。

查找并显示匹配行及其前后两行

1
grep -C 2 "error" /var/log/syslog

/var/log/syslog 文件中查找包含 error 的行,并显示其前后两行。

统计包含特定单词的文件数量

1
grep -rl "word" /path/to/directory | wc -l

/path/to/directory 目录中递归搜索包含 word 的文件,并统计文件数量。

结语

通过这些示例,可以体会到 grep 的强大能力和灵活性,也让它成为Linux中最实用的文本处理工具之一。

使用 Hugo 构建
主题 StackJimmy 设计