Shell 三剑客:grep、sed、awk 超全实战教程
前言从事 Linux 运维、SRE 工作日常离不开日志分析、文本过滤、数据处理。grep、sed、awk被称为 Shell 三剑客分工明确grep文本查找过滤擅长检索匹配行sed流编辑器擅长文本替换、行处理awk文本格式化、列处理小型编程语言一、grep —— 文本搜索工具核心作用根据正则表达式匹配筛选出符合条件的文本行。常用参数# -i 忽略大小写 # -n 显示行号 # -v 反向匹配不匹配 # -E 使用扩展正则等价egrep # -r 递归搜索目录文件 # -o 只输出匹配到的内容实战示例# 匹配包含error的行 grep error app.log # 忽略大小写显示行号 grep -in error app.log # 过滤注释行和空行 grep -vE ^#|^$ nginx.conf # 递归查找目录下包含timeout的文件 grep -r timeout /etc/nginx/ # 只打印匹配字段 grep -o [0-9]\\.[0-9]\\.[0-9]\\.[0-9]\ access.log二、sed —— 流式文本编辑器核心作用逐行处理文本擅长增删改查、字符串替换不修改原文件如需修改加-i 语法sed [参数] 寻址动作 file常用动作s/旧/新/替换p打印d删除a追加行i插入行常用参数# -i 直接修改原文件推荐测试先用 -i.bak 自动备份 # -n 只输出匹配行 # -E 扩展正则实战示例# 替换所有hello为world仅输出不改文件 sed s/hello/world/g test.txt # 直接修改文件同时生成备份 test.txt.bak sed -i.bak s/hello/world/g test.txt # 删除空行 sed /^$/d test.txt # 打印第5~10行 sed -n 5,10p test.txt # 在第3行后面追加内容 sed 3a new line content test.txt # 在第3行前面插入内容 sed 3i insert content test.txt⚠️ 注意sed -i操作文件前建议先不加 - i 预览结果防止误删配置三、awk —— 文本格式化语言最强核心作用按列处理文本分割字段、统计、格式化输出支持变量、判断、循环。 默认分隔符空格 / Tab 语法awk 条件{执行动作} file内置常用变量$0整行内容$1,$2...第 1 列、第 2 列NF当前行总列数NR行号FS输入分隔符OFS输出分隔符实战示例# 打印第一列和第三列 awk {print $1,$3} test.txt # 指定逗号为分隔符 awk -F , {print $2} data.csv # 打印行号、最后一列 awk {print NR,$NF} test.txt # 筛选第3列大于100的数据 awk $3 100 {print $0} test.txt # 多条件匹配 awk $1root $30 /etc/passwd # BEGIN 初始化处理文本前执行 awk BEGIN{FS:;print 用户名}{print $1} /etc/passwd四、三剑客场景区分重点工具定位适用场景grep查找只需要筛选、检索行单纯过滤sed行处理、替换整行删除、字符串全局替换、插入行awk列处理、计算截取字段、数值运算、格式化输出组合使用经典案例# 日志过滤找出error日志提取IP去重统计 grep error access.log | awk {print $1} | sort | uniq -c # 过滤配置文件去掉注释空行替换端口号 grep -vE ^#|^$ nginx.conf | sed s/80/8080/g五、常见踩坑总结grep 不加-E部分正则符号需要转义sed-i直接修改文件生产环境优先备份awk 默认分隔符是连续空格不是单个空格尽量组合使用先 grep 筛选sed 替换awk 解析字段