15个救命grep命令,运维人必存!

Lear 2025-07-31 11:00:00
Categories: > > Tags:

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.显示匹配字符串的上下文

以下命令分别演示:

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 都提供了强大的功能支持。