Grep
grep 是 Linux 中强大的文本搜索工具,其名称来源于 “Global Regular Expression Print”。以下是 grep 命令的常见用法:
基本语法
grep [选项] 模式 [文件...]常用选项
1. 基础搜索
# 在文件中搜索包含"error"的行
grep "error" filename.log
# 搜索时忽略大小写
grep -i "error" filename.log
# 显示不匹配的行
grep -v "success" filename.log
# 显示匹配的行号
grep -n "pattern" filename.txt2. 递归搜索
# 在当前目录及子目录中递归搜索
grep -r "function_name" .
# 递归搜索并显示文件名
grep -r -l "text" /path/to/directory3. 输出控制
# 只显示匹配的文件名(不显示具体行)
grep -l "pattern" *.txt
# 显示匹配行前后的内容
grep -A 3 "error" logfile.txt # 显示匹配行后3行
grep -B 2 "error" logfile.txt # 显示匹配行前2行
grep -C 2 "error" logfile.txt # 显示匹配行前后各2行
# 只显示匹配的部分(而非整行)
grep -o "pattern" file.txt4. 正则表达式
# 使用扩展正则表达式
grep -E "pattern1|pattern2" file.txt
# 匹配以"start"开头的行
grep "^start" file.txt
# 匹配以"end"结尾的行
grep "end$" file.txt
# 匹配空行
grep "^$" file.txt
# 使用字符类
grep "[0-9]" file.txt # 包含数字的行
grep "[a-zA-Z]" file.txt # 包含字母的行5. 文件处理
# 从多个文件中搜索
grep "text" file1.txt file2.txt
# 使用通配符
grep "pattern" *.log
# 从标准输入读取
cat file.txt | grep "pattern"
echo "some text" | grep "text"6. 统计信息
# 统计匹配的行数
grep -c "pattern" file.txt
# 统计匹配的次数(可能一行有多个匹配)
grep -o "pattern" file.txt | wc -l实用示例
1. 日志分析
# 查找今天的错误日志
grep "ERROR" /var/log/syslog | grep "$(date '+%Y-%m-%d')"
# 查找包含IP地址的行
grep -E "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" access.log2. 代码搜索
# 在项目中查找函数定义
grep -r "function_name(" src/
# 查找包含TODO或FIXME的注释
grep -r -E "TODO|FIXME" ./
# 查找空行并统计数量
grep -c "^$" source_code.py3. 系统监控
# 查看特定进程
ps aux | grep "nginx"
# 检查端口占用
netstat -tulpn | grep ":80"4. 文件内容检查
# 检查配置文件中的有效设置(忽略注释和空行)
grep -v "^#" /etc/ssh/sshd_config | grep -v "^$"
# 查找包含邮箱地址的行
grep -E "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" file.txt高级技巧
1. 使用上下文
# 显示错误及其上下文
grep -C 3 -i "error" application.log2. 反向引用
# 使用扩展正则表达式的分组
grep -E "(abc).*\1" file.txt # 查找重复的"abc"3. 二进制文件搜索
# 在二进制文件中搜索文本字符串
grep -a "text" binaryfile4. 颜色高亮
# 启用颜色高亮(通常默认开启)
grep --color=auto "pattern" file.txt常用组合
与其它命令配合
# 查找并排序
grep "pattern" file.txt | sort
# 查找并计数
grep -o "pattern" file.txt | sort | uniq -c
# 查找并保存结果
grep "error" logfile.txt > errors.txt这些是 grep 命令最常用的用法,掌握它们可以大大提高在 Linux 环境下处理文本的效率。