1. 文本处理利器 sed 命令概述
在Linux系统日常运维和数据处理中,文本替换是最基础也最频繁的操作需求。作为Unix三剑客之一的sed(Stream Editor),以其高效的行处理能力和正则表达式支持,成为命令行下文本替换的首选工具。我第一次接触sed是在处理一个500MB的nginx日志文件时,当时用vim打开直接卡死,而sed仅用3秒就完成了所有IP地址的脱敏处理,从此这个工具就成了我的必备技能。
sed的核心优势在于其流式处理模式——无需将整个文件加载到内存,而是逐行读取、处理并输出。这种工作方式特别适合处理大型日志文件、批量修改配置文件等场景。与awk侧重字段提取不同,sed更专注于基于模式的查找替换,其语法简洁但功能强大,熟练掌握后可以大幅提升文本处理效率。
注意:虽然sed和vim都支持文本替换,但vim是交互式编辑器,适合小文件手动编辑;而sed是面向脚本的非交互式工具,适合自动化批量处理。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. sed替换命令核心语法解析
2.1 基础替换格式
sed的标准替换命令结构如下:
bash复制sed 's/原内容/替换内容/[修饰符]' 文件名
这个看似简单的命令实际上包含多个关键组件:
s:表示替换操作(substitute),是sed最常用的命令- 分隔符:传统使用
/,但任何可见字符都可作为分隔符(如|,@等),当处理包含斜杠的路径时特别有用 - 原内容:支持基础字符串和正则表达式
- 替换内容:普通字符串或包含反向引用的正则匹配结果
- 修饰符:控制替换范围和行为的关键参数
2.2 正则表达式支持
sed的真正威力在于其完整的正则表达式支持:
- 基础正则:
^(行首),$(行尾),.(任意字符),*(零次或多次) - 字符类:
[abc]匹配a/b/c,[^abc]排除匹配 - 分组捕获:
\(...\)定义捕获组,\1引用第一个组 - 数量限定:
\{n,m\}表示n到m次重复
例如将所有以#开头的注释行替换为空行:
bash复制sed 's/^#.*$//' config.conf
2.3 修饰符详解
修饰符直接影响替换行为的范围和作用方式:
g:全局替换(默认只替换每行第一个匹配)
