Shell脚本进阶——管道、正则和批量数据处理

发布时间:2026/9/12 8:39:13

Shell脚本进阶——管道、正则和批量数据处理 面试翻车现场上篇讲了Shell脚本基础有读者说我会写if和for了但看别人的脚本里一堆|、grep、awk、sed完全看不懂。这就是管道和文本处理工具。它们是Shell脚本的灵魂。面试中也常考。我一般会问给你一个日志文件怎么找出所有ERROR行并统计数量如果你只会用vim打开然后数那就尴尬了。管道命令的串联管道的思想很简单把一个命令的输出传给下一个命令作为输入。符号是|。ps aux | grep robot # 列出进程过滤出robot相关的 cat log.txt | grep ERROR # 读日志过滤出ERROR行 ls -l | wc -l # 列出文件统计行数即文件数量管道可以串联多个命令cat robot.log | grep ERROR | grep lidar | wc -l这条命令做了四件事读日志→找ERROR→再找包含lidar的→统计行数。最终结果是激光雷达相关的错误数量。重定向echo hello file.txt # 写入文件覆盖 echo world file.txt # 追加到文件 cat log.txt 21 # 把标准错误重定向到标准输出 command /dev/null 21 # 丢弃所有输出21这个写法很常见但新手容易搞混。文件描述符1是标准输出2是标准错误。21意思是把标准错误也送到标准输出去。配合就能把所有输出都重定向到文件或者丢弃。grep文本搜索利器grep是最常用的文本搜索工具。grep ERROR robot.log # 搜索包含ERROR的行 grep -i error robot.log # 忽略大小写 grep -r TODO src/ # 递归搜索目录下所有文件 grep -n ERROR robot.log # 显示行号 grep -c ERROR robot.log # 只输出匹配行数 grep -v DEBUG robot.log # 反向匹配排除DEBUG grep -E ERROR|WARN robot.log # 扩展正则匹配ERROR或WARN组合使用# 找出最近1小时内修改过的文件 find ~/robot_ws -name *.cpp -mmin -60 # 找出所有包含TODO的C文件 grep -rn TODO src/ --include*.cpp # 统计每个文件的ERROR数量 grep -c ERROR *.log | sort -t: -k2 -nrsed流编辑器sed可以在不打开文件的情况下修改文本。sed s/old/new/g file.txt # 替换只输出不改文件 sed -i s/old/new/g file.txt # 直接修改文件 sed -i s/DEBUG/INFO/g *.log # 批量修改多个文件 sed -n 10,20p file.txt # 只输出第10到20行 sed /ERROR/d file.txt # 删除包含ERROR的行实际应用场景# 批量修改配置文件中的IP地址 sed -i s/192.168.1.100/192.168.1.200/g config.yaml # 给所有C文件添加头文件保护 sed -i 1i #pragma once *.h # 删除日志中的时间戳假设格式是[2024-01-01 12:00:00] sed s/\[[0-9-]* [0-9:]*\]//g robot.logawk文本处理利器awk是按列处理文本的工具。默认以空格或Tab分隔。# 输出每行的第1列和第3列 awk {print $1, $3} data.txt # 输出进程列表中CPU占用超过10%的进程 ps aux | awk $3 10 {print $2, $3, $11} # 计算日志中ERROR出现的次数 grep ERROR robot.log | awk END {print NR} # 按分隔符处理 echo a:b:c | awk -F: {print $2} # 输出bawk还能做数学运算# 计算一列数字的平均值 cat scores.txt | awk {sum $1} END {print sum/NR} # 统计日志中每种错误类型的数量 grep ERROR robot.log | awk {print $5} | sort | uniq -c | sort -rn正则表达式正则表达式是文本匹配的通用语法grep、sed、awk都支持。常用模式. 匹配任意单个字符 * 匹配前一个字符0次或多次 [abc] 匹配a、b或c [a-z] 匹配a到z之间的任意字符 ^ 行首 $ 行尾 \d 数字需要-E或-P \w 字母数字下划线 匹配前一个字符1次或多次 ? 匹配前一个字符0次或1次 () 分组 | 或实际例子# 匹配IP地址 grep -E [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} log.txt # 匹配邮箱 grep -E [a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,} contacts.txt # 匹配ROS2的topic名称以/开头 grep -E ^/[a-z_/] topics.txt批量数据处理实战场景1分析机器人日志#!/bin/bash # 分析日志中的错误分布 LOG_DIR~/robot_logs echo 日志错误分析 for log in $LOG_DIR/*.log; do errors$(grep -c ERROR $log 2/dev/null || echo 0) warns$(grep -c WARN $log 2/dev/null || echo 0) echo $(basename $log): ERROR$errors, WARN$warns done echo echo 最常见的ERROR类型 grep ERROR $LOG_DIR/*.log | awk -FERROR {print $2} | sort | uniq -c | sort -rn | head -10场景2批量重命名文件#!/bin/bash # 把所有.jpg改成.png假设内容已经是PNG格式 for file in *.jpg; do mv $file ${file%.jpg}.png done echo 重命名完成场景3提取ROS2 bag中的信息#!/bin/bash # 列出所有rosbag中的topic和消息数量 for bag in ~/bags/*.db3; do echo $(basename $bag) ros2 bag info $bag | grep -E Topic|Count echo done面试常见考点管道和重定向的区别——管道把一个命令的输出传给另一个命令重定向把命令的输出送到文件或从文件读取输入。grep、sed、awk分别适合什么场景——grep擅长搜索过滤sed擅长替换修改awk擅长按列处理和统计。怎么统计一个文件中某个单词出现的次数——grep -o word file | wc -l。-o让grep每个匹配输出单独一行然后wc -l统计行数。xargs是什么——把标准输入转换成命令的参数。比如find . -name *.log | xargs rm先找到所有.log文件然后传给rm删除。Shell脚本的工程实践在实际项目中Shell脚本经常用于系统初始化和部署流程。一个好的习惯是在脚本开头加上set -euo pipefail这样遇到未定义变量、命令失败或管道错误时都会立即退出。另外用trap捕获退出信号可以做清理工作比如删除临时文件。面试时被问到Shell编程能力举一个实际的自动化部署案例会比泛泛而谈好得多。给你的建议管道和文本处理工具需要多练。光看教程没用得在实际场景中用几次才能记住。给你几个练习题找出当前目录下最大的10个文件统计你的代码仓库里有多少行C代码从日志中提取所有IP地址并去重。做机器人开发你每天都会和数据打交道——日志、配置文件、传感器输出。掌握这些工具你就能快速从海量数据中提取有用信息。这比写Python脚本快得多特别是在SSH到机器人上的时候。上一篇第89篇 Shell脚本入门——自动化测试和环境配置的起点下一篇预告第91篇 apt与源码编译——Linux软件安装的完整指南
延伸阅读

更多相关文章

2026/9/10 12:37:46

别怕心脏“乱了节奏”——三种方法帮你找回平稳心跳

持续性房颤,就是心脏的“电路系统”彻底乱了,心房像一锅沸腾的粥一样持续乱颤超过7天。好消息是,目前医学上有三把“钥匙”可以应对。下面逐一介绍。第一把钥匙:药物治疗——给心脏“降速防堵”药物是治疗的基础手段,主…

2026/9/11 20:01:53

笑麻!OpenCut:我用了四年,反倒成抄袭的了?

在开源圈混久了,见过代码搬运、见过功能照搬、见过套壳碰瓷,但只抄个名字,就能把原创正主污成山寨抄袭者的魔幻名场面,今天算是彻底开眼了。今天的冤种主角,是实打实的国产工具OpenCut。全程剧情简单概括:国…

2026/9/12 8:35:11

Midscene.js 自动化测试:3步跑通第一个AI视觉用例

Midscene.js 自动化测试:3步跑通第一个AI视觉用例 【免费下载链接】midscene GUI Agent for E2E Testing 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 改完页面,又要手动点一遍验证?DOM 选择器(定位网页元…

2026/9/12 8:35:11

Vibe-Trading Wiki 静态站点架构与 AI-Agent 流量分析实战指南

Vibe-Trading Wiki 静态站点架构与 AI-Agent 流量分析实战指南 【免费下载链接】Vibe-Trading "Vibe-Trading: Your Personal Trading Agent" 项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading 本篇技术指南围绕 Vibe-Trading 官方文档站点&am…

2026/9/12 8:35:11

AI Agent案例库:21个可跑场景的30分钟效果验证

AI Agent案例库:21个可跑场景的30分钟效果验证 【免费下载链接】500-AI-Agents-Projects The 500 AI Agents Projects is a curated collection of AI agent use cases across various industries. It showcases practical applications and provides links to open…

2026/9/12 8:35:11

Google Pixel 10a评测:中端机皇的AI摄影与性能突破

1. Google Pixel 10a 产品概述Google Pixel 10a 作为 Pixel a 系列的最新成员,延续了该系列"高性价比旗舰体验"的核心定位。这款设备在保持亲民价格的同时,通过多项硬件升级重新定义了中端机的标准。最引人注目的是其全新设计的平整后盖&#…

2026/9/12 8:30:10

Blender渲染优化:本地与云渲染方案全解析

1. 渲染方式选择的核心考量因素 当我们在Blender中完成3D场景制作后,渲染环节的选择往往让创作者陷入纠结。本地渲染和云渲染农场各有拥趸,但实际选择时需要综合考量多个维度因素。 1.1 项目规模与复杂度评估 渲染需求首先取决于项目本身特性&#xff…

2026/9/12 2:05:33

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/12 3:55:12

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/12 0:04:17

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现

简介:本资源是一份面向智能优化算法研究者与MATLAB初学者的仿生智能算法实践代码包,聚焦于长鼻浣熊优化算法(COA)的多策略改进与性能验证。针对传统COA易陷局部最优、收敛精度不足等问题,作者融合Circle映射初始化提升…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/12 6:37:43

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码