sed命令
sed 命令详解:流编辑器的文本处理艺术
sed(Stream Editor,流编辑器)是 Linux 中处理文本的核心工具之一,它以逐行处理的方式对数据流进行编辑(如替换、删除、新增等),且默认不修改原文件,仅输出处理结果。掌握 sed 能高效完成批量文本修改、日志分析、配置文件处理等任务。
sed 工作原理与基本语法
工作流程
- 读取:从输入流(文件或管道)中读取一行数据到缓冲区(称为 “模式空间”)。
- 处理:根据提供的
sed命令(规则)处理缓冲区中的行。 - 输出:将处理后的行输出到标准输出(屏幕)。
- 重复:直到所有行处理完毕。
特点:默认不修改原文件,仅输出处理结果;可通过 -i 选项直接修改原文件。
基本语法
sed [选项] '地址范围 动作' 输入文件
核心选项
| 选项 | 功能说明 |
|---|---|
-n |
静默模式,仅输出被 p 动作指定的行(抑制默认输出)。 |
-e |
允许在同一行指定多个 sed 命令(多命令执行)。 |
-f 脚本文件 |
从文件中读取 sed 命令(适合复杂脚本)。 |
-r |
启用扩展正则表达式(无需转义 +、? 等元字符)。 |
-i |
直接修改原文件(危险操作,建议先备份或测试)。 |
常用动作
| 动作 | 功能说明 |
|---|---|
a \文本 |
在指定行后追加文本(多行需用 \ 分隔)。 |
i \文本 |
在指定行前插入文本(多行需用 \ 分隔)。 |
c \文本 |
用指定文本替换整行(多行需用 \ 分隔)。 |
d |
删除指定行。 |
p |
打印指定行(常与 -n 配合使用)。 |
s/旧字符串/新字符串/修饰符 |
替换字符(核心动作,详见下文)。 |
w 文件名 |
将指定行写入文件。 |
地址范围:指定要处理的行
sed 通过 “地址范围” 指定对哪些行执行动作,默认对所有行生效。地址可以是行号、正则表达式或两者结合。
行号寻址
- 单一行:
数字(如3表示第 3 行)。 - 行范围:
起始行,结束行(如2,5表示第 2 到 5 行)。 - 从行号到结尾:
数字,$( 表示第 3 行到最后一行)。