sed 命令速查手册:从一次午夜事故说起
sed 命令速查手册从一次午夜事故说起那天晚上电话在午夜的寂静中突然响起屏幕上的名字让我心里咯噔一下——生产环境告警。我迅速打开电脑终端里跳动的红色错误信息告诉我有一个关键的配置文件出问题了需要立即修复。不巧的是这次的问题涉及到了服务器上的上百个配置文件而且需要批量修改一行特定的内容。当时我的脑子里迅速闪过几个可能的解决方案但时间紧迫我最终选择了sed这个命令行工具。如果是你你会选什么呢我选择sed因为我知道它能快速、批量地修改文本但这次的经历也让我深刻认识到了sed的一些坑和核心功能。我急急忙忙地打开了终端输入了我记忆中应该能工作的sed命令满心期待着问题能迅速解决结果却是我的配置文件被完全破坏了。那一瞬间我真的是欲哭无泪。但是紧急时刻不能慌我只能硬着头皮再次研究sed的用法这次仔细、认真最终问题得到了圆满解决。从那以后我决定彻底掌握sed今天就来分享一下我的心得和经验。事故处理完后我坐在电脑前屏幕上的sed命令行就像是一个谜。sedstream editor是一个强大的文本处理工具尤其适合处理大量文本数据支持正则表达式可以在没有交互的情况下完成编辑操作。但正是因为它的强大和灵活性新手很容易掉进坑里。下面我将通过几个核心语法和实战示例帮助你避开我曾经遇到的那些坑。核心语法sed的基本格式是sed [选项] 命令 文件。选项和命令是实现功能的关键但也是最容易让人混淆的地方。例如-i选项可以让你直接修改原文件-n则是只打印匹配到的行而不是默认的打印所有行。命令部分则是sed的灵魂比如s/旧内容/新内容/用于替换d用于删除行p用于打印行等。开始实战替换文本sed最常用的功能之一就是替换文本。假设你需要将文件中所有出现的 old 替换成 new可以使用# 替换文件中所有行的 old 为 new sed -i s/old/new/g filename.txt这里的-i选项意味着直接编辑文件而不是输出到标准输出。s/old/new/g是替换命令g表示全局替换即一行中所有出现的 old 都会被替换成 new。删除行有时候你需要删除某些特定的行。比如删除文件中所有包含 error 的行# 删除所有包含 error 的行 sed -i /error/d filename.txt/error/d中的d是删除的意思/error/是正则表达式用来匹配包含 error 的行。行的插入和追加sed还可以用于在文件中插入或追加新行。例如在所有匹配 start 的行后插入一句 This is a new line.# 在匹配 start 的行后插入新行 sed -i /start/a This is a new line. filename.txt这里的a表示在匹配的行后追加内容。如果你想在匹配的行前插入内容可以使用i选项# 在匹配 start 的行前插入新行 sed -i /start/i This is a new line. filename.txt使用正则表达式正则表达式是sed的另一个强大功能。例如如果你需要将文件中所有以数字开头的行删除# 删除所有以数字开头的行 sed -i /^[0-9]/d filename.txt^[0-9]是正则表达式^表示行的开始[0-9]表示数字/d则是删除匹配的行。批量处理多个文件在我那次紧急的事故中最大的挑战是如何批量处理多个文件。sed提供了处理多个文件的选项你可以使用*通配符来匹配多个文件# 替换多个文件中的 old 为 new sed -i s/old/new/g *.txt这条命令会对当前目录下所有.txt文件进行操作。不过要注意如果你的文件名中包含特殊字符可能会导致意外的结果。我建议在批量处理之前先用ls命令查看文件列表确保没有问题。地址范围sed允许你指定一个地址范围来操作文件的特定部分。例如只替换文件中第 5 行到第 10 行中的 old 为 new# 替换第 5 行到第 10 行中的 old 为 new sed -i 5,10s/old/new/g filename.txt地址范围的指定非常有用特别是在处理大型文件时可以避免不必要的全局替换。备份原文件在紧急情况下直接修改原文件可能会带来不可预料的风险。为了避免这种情况sed的-i选项可以加上一个后缀用于创建备份文件# 替换文本并创建备份文件 sed -i.bak s/old/new/g filename.txt这样filename.txt.bak就是原文件的备份可以在需要时恢复。实战案例事故复盘回到那次事故我需要修改所有配置文件中的特定端口号。当时我使用的命令是# 错误的命令 sed -i s/8080/9090 /etc/configs/*.conf结果我不仅修改了端口号还误删了一些其他关键内容。后来我发现问题出在没有使用正则表达式的精确匹配以及没有创建备份文件。正确的命令应该是# 正确的命令 sed -i.bak s/^\(.*\)8080\(.*\)$/\19090\2/ /etc/configs/*.conf这里^\(.*\)8080\(.*\)$是一个正则表达式\(.*\)用于捕获任意字符8080是需要替换的目标文本。\1和\2分别表示第一个和第二个捕获组确保其他内容不被误改。高级用法sed的高级用法还包括多行处理。例如将连续的多行合并成一行# 将连续的多行合并成一行 sed -i :a;N;$!ba;s/\n/ /g filename.txt这里的:a是一个标签N用于将下一行添加到模式空间$!ba表示如果不是最后一行则跳转到标签as/\n/ /g将换行符替换为空格从而实现多行合并。总结性建议使用sed时一定要小心。尤其是在批量处理文件时建议先在备份文件上测试命令确保没有错误后再应用于实际文件。另外多学习一些正则表达式的知识这将大大提升你使用sed的效率和准确性。我那次的经历就是因为在正则表达式上的疏忽导致了大问题。一些实用工具推荐如果你经常需要处理时间、正则表达式或其他文本处理任务强烈推荐一个在线工具——Hey Cron。这个网站提供了多种功能如Cron 表达式生成器输入中文描述秒转 cron 表达式再也不用担心 cron 语法问题了。正则表达式生成器帮助你快速生成和测试正则表达式适合sed或其他需要正则表达式的场景。中英互译支持中文和英文的互译非常适合写技术文档或代码注释。JSON 格式化帮助你快速格式化和验证 JSON 数据适合 API 开发和调试。Base64 编码解码方便地进行 Base64 编码和解码适合处理 URL 或编码数据。时间戳转换快速将时间戳转换为人类可读的日期时间反之亦然非常适合日志分析。JWT 解析解析 JWT 令牌查看其内容适合安全相关的调试。这些工具不仅能提升你的工作效率还能在紧急时刻助你一臂之力。希望你永远不要遇到像我那样的事故但万一遇到了这些工具可能会是你最好的救星。再次提醒使用sed时一定要小心确保命令无误再执行。希望这次分享能帮助你更好地理解和使用sed避开那些可能的坑。如果你有任何建议或想法欢迎在评论区留言我们一起来交流

相关新闻

课题申报截止前一周自救

课题申报截止前一周自救

人物双眼空洞的半躺在座椅上,绝望的脸。字幕补充:“绝望”。然后缓缓从座椅上滑下去。 距离课题申报倒计时还剩:7天。人物打哈欠的面部特写。 人物对着镜头说:你好,开启项目申报最后一周倒计时。 “想自己翻政策、查历…

2026/10/10 8:39:50 阅读更多 →
Cursor智能补全SQL总出错?5步精准调教AI模型,让生成语句100%通过语法+业务双校验

Cursor智能补全SQL总出错?5步精准调教AI模型,让生成语句100%通过语法+业务双校验

更多请点击: https://intelliparadigm.com 第一章:Cursor智能补全SQL总出错?5步精准调教AI模型,让生成语句100%通过语法业务双校验 Cursor 的 SQL 补全常因上下文缺失、方言混淆或业务逻辑脱节而生成非法或低效语句。问题根源并非…

2026/10/14 13:50:19 阅读更多 →
【iOS】Core Data

【iOS】Core Data

【iOS】Core Data前言Core Data基本概念Core Data核心组件Core Data增删改查总结前言 笔者写项目时用到了Core Data,在此系统学习总结一下。 Core Data基本概念 Core Data是Apple官方推出,适配iOS/macOS的本地数据持久化与对象图管理框架,…

2026/10/12 12:18:30 阅读更多 →

最新新闻

Hive substr中文乱码根源与5种实战解决方案

Hive substr中文乱码根源与5种实战解决方案

1. 项目概述:当Hive的substr遇上中文乱码,不是函数错了,是字符集在“说方言”你有没有遇到过这样的场景:一条日志字段里明明存着“用户_张三_20240516_订单完成”,用substr(col, 4, 6)想截出“张三”两个字&#xff0c…

2026/10/14 13:49:58 阅读更多 →
接口性能优化实战:从2秒到200ms的三层击破法

接口性能优化实战:从2秒到200ms的三层击破法

1. 这不是玄学,是可复现的接口性能优化实战“接口响应时间从2秒压到200毫秒以内”——这句话在很多技术团队的周会上被反复提起,听起来像一句目标口号,甚至带点理想主义色彩。但在我参与过的三个高并发业务系统重构中,它是一条必须…

2026/10/14 13:49:58 阅读更多 →
Hive substr中文乱码根源与字符安全截取方案

Hive substr中文乱码根源与字符安全截取方案

1. 项目概述:为什么一个看似简单的substr函数会突然在中文场景下“罢工”最近在某数据中台的日常ETL任务维护中,我连续三天被同一个报错堵在工位上:java.lang.StringIndexOutOfBoundsException: String index out of range,堆栈指…

2026/10/14 13:49:58 阅读更多 →
Ponytail 阅读进度条插件:滚动进度原理、接入与性能优化指南

Ponytail 阅读进度条插件:滚动进度原理、接入与性能优化指南

做内容站这几年,我一直有个执念:长文阅读体验不能只靠排版,还得给读者一点“进度反馈”。早先试过在文章顶部加一个手写的滚动进度条,但那种零散代码维护起来太麻烦,后来换成了开源的轻量级滚动进度插件,也…

2026/10/14 13:49:58 阅读更多 →
iOS容器底层探秘:NSMutableArray、NSDictionary、NSSet与NSCache深度解析

iOS容器底层探秘:NSMutableArray、NSDictionary、NSSet与NSCache深度解析

做iOS开发久了,数组、字典、集合这些容器天天在用,但真被人问一句NSMutableArray底层到底怎么扩容、NSDictionary凭什么查得那么快、NSCache和NSMutableDictionary除了线程安全还有什么本质区别、copy和mutableCopy的坑到底在哪,很多人会愣一…

2026/10/14 13:49:58 阅读更多 →
整车八自由度Simulink动力学模型搭建:从方程到仿真验证

整车八自由度Simulink动力学模型搭建:从方程到仿真验证

做整车动力学仿真的人,几乎都会经历从二自由度自行车模型起步,再逐步往多自由度模型走的过程。二自由度模型能把横摆和侧向运动的基本逻辑讲清楚,但一涉及到载荷转移、侧倾对轮荷分布的影响、四个车轮独立的转速动力学,它就完全不…

2026/10/14 13:48:57 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →