Shell中grep命令的经典用法示例

grep命令简介

grep(Global Regular Expression Print)是Linux/Unix系统中最常用的文本搜索工具之一。它可以根据用户指定的模式(可以是普通字符串或正则表达式)在文件或输入流中进行搜索,并将匹配的行打印出来。

经典grep命令示例

1. 基本文本搜索

最基本的用法是在文件中搜索指定的字符串:

# 在文件中搜索包含"pattern"的行
grep "pattern" file.txt

# 忽略大小写搜索
grep -i "pattern" file.txt

# 反向匹配,显示不包含"pattern"的行
grep -v "pattern" file.txt

2. 显示行号和统计信息

# 显示匹配行的行号
grep -n "pattern" file.txt

# 统计匹配的行数
grep -c "pattern" file.txt

# 只显示包含匹配字符串的文件名
grep -l "pattern" *.txt

3. 递归搜索和目录搜索

# 递归搜索当前目录及其子目录中所有文件中包含"pattern"的行
grep -r "pattern" .

# 在指定目录中递归搜索
grep -r "main" /path/to/directory

# 只显示包含匹配内容的文件名(递归)
grep -rl "pattern" /path/to/directory

4. 上下文显示

# 显示匹配行及其后2行
grep -A 2 "pattern" file.txt

# 显示匹配行及其前2行
grep -B 2 "pattern" file.txt

# 显示匹配行及其前后2行
grep -C 2 "pattern" file.txt

5. 正则表达式匹配

# 搜索包含数字的行
grep "[0-9]" file.txt

# 搜索以"a"开头、以"z"结尾的行
grep "^a.*z$" file.txt

# 匹配整个单词(避免匹配到子串)
grep -w "cat" file.txt

# 使用扩展正则表达式
grep -E "error|fail|warning" log.txt

# 匹配一个或多个数字
grep -E "[0-9]+" file.txt

# 仅输出匹配的部分(而不是整行)
grep -o "[0-9]\+" file.txt

6. 复杂示例和管道使用

# 结合管道过滤命令输出
ps aux | grep "python"

# 查找空行
grep "^$" file.txt

# 查找IP地址
grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" file.txt

# 查找邮箱地址
grep -E "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" file.txt

# 在多个文件中查找
grep "pattern" file1.txt file2.txt file3.txt

# 着色显示匹配项
grep --color=auto "pattern" file.txt

7. 其他实用选项

# 使用固定字符串而不是正则表达式
grep -F "literal.string" file.txt

# 匹配次数限制(最多显示3个匹配)
grep -m 3 "pattern" file.txt

# 显示不匹配的行数
grep -vc "pattern" file.txt

# 从文件中读取模式
grep -f patterns.txt file.txt

总结

grep命令是Linux/Unix系统中文本处理的核心工具之一,掌握其基本用法可以大大提高文本搜索和处理的效率。以上示例涵盖了grep的大部分常用功能,通过组合使用这些选项,可以完成复杂的文本搜索任务。

在日常工作中,grep常常与其他命令配合使用,通过管道符(|)形成强大的文本处理链,是每个系统管理员和开发人员都应该熟练掌握的工具。