15个救命grep命令,运维人必存!
grep 是 Linux 系统中处理文本文件的强大工具。无论是系统管理员、开发人员还是日常用户,都常用它来搜索和过滤文件中的文本。以下用 15 个实际例子展示如何高效使用 grep 命令,并对输入输出进行演示。
1.在文件中查找指定字符串
在文件 sample.log 中查找包含字符串 error 的所有行:
grep “error” sample.log
输出:
2023-10-13 09:32:22 - Error: Cannot connect to database
2023-10-13 10:02:45 - Error: Missing configuration file
2.忽略大小写进行搜索
使用 -i 参数,可以忽略大小写,匹配 error 和 ERROR:
grep -i “error” sample.log
输出:
2023-10-13 09:32:22 - Error: Cannot connect to database
2023-10-13 10:02:45 - ERROR: Disk space is full
2023-10-13 10:02:45 - Error: Missing configuration file
3.递归搜索目录中的文件
在目录 /path/to/logs 中查找所有文件中包含 function 的行:
grep -r “function” /path/to/logs
输出:
/path/to/logs/file1.log:35:Found function main()
/path/to/logs/file2.log:12:function add(a, b)
4.统计匹配的次数
统计字符串 total 在文件中出现的次数:
grep -c “total” sample.log
输出:
3
5.只显示包含匹配内容的文件名
列出所有包含 config 的文件名:
grep -l “config” *.txt
输出:
file1.txt
file2.txt
6.查找时显示具体行号
显示包含 main 的行及所在行号:
grep -n “main” app.py
输出:
10:def main():
65:# Call main function
7.反向查找
使用 -v 选项显示不包含 # 的行:
grep -v “#“ /etc/nginx/nginx.conf
输出:
server {
listen 80;
server_name example.com;
}
8.精确匹配一个单词
用 -w 参数只匹配完整单词而不是部分字符串:
grep -w “error” sample.log
输出:
2023-10-13 09:32:22 - Error: Cannot connect to database
2023-10-13 10:02:45 - Error: Missing configuration file
9.显示匹配字符串的上下文
- -A:显示匹配行后面几行
- -B:显示匹配行前面几行
- -C:显示匹配行前后几行
以下命令分别演示:
grep -A 2 “error” sample.log # 匹配行和后两行
输出:
Error: Cannot connect to database
Recovery process started
Recovery process completed
grep -B 1 “error” sample.log # 匹配行和前一行
输出:
Initialization completed
Error: Missing configuration file
grep -C 1 “error” sample.log # 匹配行上下各一行
输出:
Initialization completed
Error: Missing configuration file
Restarting service
10.只显示匹配的内容
用 -o 参数仅显示匹配内容,而不是整行:
grep -o “ERROR.*“ sample.log
输出:
ERROR: Disk space is full
Error: Missing configuration file
11.在压缩文件中查找字符串
在 .gz 压缩文件内搜索 critical:
zgrep “critical” log.gz
输出:
[CRITICAL] System failure at node-1
12.使用正则表达式匹配
用 -E 或等价的 egrep,匹配 error 或 fail 开头的行:
grep -E “^(error|fail)” sample.log
输出:
error: Configuration missing
fail: Could not start service
13.递归搜索时排除特定文件类型
在递归搜索中,排除 .log 文件:
grep -r –exclude=”*.log” “DEBUG” /path/to/logs
输出:
/path/to/logs/script.py:DEBUG: Starting process
/path/to/logs/setup.py:DEBUG: Initializing configurations
14.按固定字符串匹配
用 grep -F 仅匹配固定字符串,忽略正则表达式:
grep -F “.*“ sample.log
输出:(假定 .* 是文件中存在的一段固定字符)
This is a test.*
error: Configuration missing.*
15.结合管道符过滤复杂结果
通过管道,结合其他 Linux 命令处理网络信息:
ifconfig | grep -A 2 “eth0”
输出:
eth0: flags=4163<UP,BROADCAST> mtu 1500
inet 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255
掌握 grep 的灵活用法,可以高效完成多种文本搜索任务。无论是普通字符串查找、复杂的正则表达式匹配,还是结合其他命令进行管道处理,grep 都提供了强大的功能支持。