grep · 关键词猎手
上游:find(先找到文件,再用 grep 搜内容)· cat(cat 看内容,grep 过滤内容) 下游:管道(grep 几乎总是和管道一起用)· shell-script(脚本里用 grep 判断条件) 参见:find(find 搜文件名,grep 搜文件内容,两个互补)
一句话是什么
grep 在文件里搜索关键词,只显示包含那个词的行——
就像在一本书里用荧光笔划出所有提到”我的世界”的句子。
为什么需要它
你有一个配置文件,几百行,想找到 port 设置在哪一行:
# 没有 grep:你要自己从头看
cat ~/mc-server/server.properties
# (几百行滚屏,眼睛找)
# 用 grep:直接定位
grep "port" ~/mc-server/server.properties
# server-port=19132
# enable-lan-visibility=true (这行也含 port 这个词)真实场景:
- 系统日志几千行,找某个错误信息
- 配置文件找某个设置项
- 在一堆代码文件里找某个函数名
- 把命令输出过滤到你关心的那几行
核心用法
公式
grep [选项] "关键词" 文件
或者接收管道输入:
其他命令 | grep "关键词"
常用命令表
| 操作 | 命令 | 说明 |
|---|---|---|
| 基础搜索 | grep "关键词" 文件 | 显示含关键词的行 |
| 忽略大小写 | grep -i "error" 日志.log | Error/ERROR/error 都匹配 |
| 显示行号 | grep -n "port" 配置.txt | 知道在第几行 |
| 反向搜索 | grep -v "注释" 文件 | 不含关键词的行 |
| 递归搜索目录 | grep -r "关键词" 目录/ | 搜索目录里的所有文件 |
| 只显示文件名 | grep -l "关键词" *.txt | 哪些文件含这个词 |
| 统计匹配次数 | grep -c "error" 日志.log | 这个词出现了几次 |
| 显示上下文 | grep -C 2 "error" 日志.log | 关键词前后各 2 行 |
Linux 笑话
Aaron 的 Minecraft 服务器崩溃了,爸爸让他去查日志:
cat ~/mc-server/logs/latest.log日志狂刷了 800 行,什么也没看出来。
爸爸说:用 grep。
grep -i "error" ~/mc-server/logs/latest.log立刻出现:
[ERROR] Failed to load level: Permission denied
原来是权限问题——bedrock_server 没有读取游戏存档的权限。
Aaron 用了 15 秒找到了他看了 5 分钟没找到的问题。
grep 不是在帮你读日志,是在帮你跳过所有不重要的行。
例题精讲
📗 初探 Starter — 在配置文件里找设置
任务:在 Minecraft server.properties 里找到端口设置。
# 先看整个配置文件有多长
wc -l ~/mc-server/server.properties
# 假设 35 行
# 用 grep 找端口设置
grep "port" ~/mc-server/server.properties
# server-port=19132
# server-portv6=19133
# 显示行号(知道在第几行,方便用 nano 编辑)
grep -n "port" ~/mc-server/server.properties
# 14:server-port=19132
# 15:server-portv6=19133你学到了什么:grep 精准定位,-n 显示行号,
下次用 nano 编辑时直接跳到那行。
📘 应用 User — 用管道过滤命令输出
任务:apt list --installed 输出几百行,找到跟 python 有关的。
# 原始输出(几百行)
apt list --installed 2>/dev/null | head -5
# Listing...
# adduser/noble,now 3.137ubuntu1 all [installed]
# ...
# 用 grep 过滤
apt list --installed 2>/dev/null | grep python
# python3/noble,now 3.12.3-0ubuntu2 amd64 [installed]
# python3-apt/noble,now 2.7.7 amd64 [installed]
# python3-minimal/noble,now 3.12.3-0ubuntu2 amd64 [installed]
# 忽略大小写(Python 或 python 都找到)
apt list --installed 2>/dev/null | grep -i python你学到了什么:命令 | grep "关键词" 是过滤输出的标准方法,
不需要把输出先存到文件再搜——管道直接传。
📙 管理 Admin — 搜索系统日志诊断问题
任务:查看今天的系统日志,找到所有错误和警告。
# 方法一:用 journalctl(systemd 日志)
sudo journalctl --since "today" | grep -i "error\|warning\|fail"
# 方法二:直接搜日志文件
sudo grep -i "error" /var/log/syslog | tail -20
# 统计今天出现了多少个 error
sudo grep -c "error" /var/log/syslog
# 找出 error 发生在哪些文件里(递归搜索)
sudo grep -rl "error" /var/log/ 2>/dev/null
# 查看 error 的上下文(前后各 3 行,了解是什么引起的)
sudo grep -C 3 "error" /var/log/syslog | head -30\| 在 grep 里的意思:
error\|warning= 匹配 “error” 或 “warning”(两个选一个)- 这叫正则表达式,
\|是”或者”
你学到了什么:-C 显示上下文是诊断问题的关键——
只看错误行有时候不够,需要看前后的情况才能理解原因。
官方文档参考
man grep # 完整手册
grep --help # 快速选项列表grep = Global Regular Expression Print;以行为单位匹配,关键词建议加引号。 在线:
https://manpages.ubuntu.com/grep
节点链接
上游(先会这些,grep 才有用武之地)
同层(总是一起出现)
- 管道 ← grep 最强用法是接在管道后面
下游(grep 是这些技能的基础)
- shell-script ← 脚本里用 grep 判断”文件里有没有某个词”
- find ← find -exec grep 组合,搜整个目录的文件内容
实战
- Minecraft-Bedrock-Server ← grep error 查服务器日志