Evan の Logbook
✨ Updates
🎨 Style Guide
🧠 Creative Resources
🗒️ Mind Notes
🧭 Knowbase
📘 SOPs
🩺 Medical Research
🛠️ Tech Chronicles
💰 Fortune Blueprint
📈 R Visionary
📊 Statistics
🖼️ BioVis
Linux sed 工具笔记
type
status
date
slug
summary
tags
category
icon
password
comment
sed(Stream EDitor) 是用于按行流式处理文本的编辑器,适合批量替换、插入、删除、筛选等操作。它既能处理文件,也能在管道中处理其它命令的输出;与 grep/awk 组合非常强大。
1) 基本语法(Basic command)
- 常用选项
n:抑制(安静)模式——默认不打印,仅显式p时输出e 'script':在命令行直接指定脚本(可多次)f file.sed:从脚本文件读取命令i[SUFFIX]:原地编辑(可带备份后缀;macOS 常写i '')E(BSD/macOS)/r(GNU):启用扩展正则(ERE)
- 脚本结构
- 地址(可选):行号/范围/正则(如
1,10、/start/,/end/) - 命令:
p(打印)d(删除)s(替换)a(追加)i(插入)c(整行替换) …
1.1 替换文本(单处 / 全局)
1.2 打印 / 删除 指定行
1.3 按内容匹配
1.4 指定列(示例由其它命令生成列)
2) 工作机制 & 正则
- 逐行读取 → 匹配地址/模式 → 执行命令 → 输出
- BRE/ERE:GNU 缺省 BRE;
E(BSD)/r(GNU) 开启 ERE
- 锚点:
^行首、$行尾
- 分组与反向引用:
- 替换中的特殊符号:
&代表整个匹配;\1 \2 …为分组
3) 常用操作(整理你给的示例 + 强化)
3.1 条件/范围
3.2 设置分隔符/全局替换
3.3 原地修改(谨慎)
3.4 多命令/脚本文件
3.5 插入/追加/整行替换
3.6 按匹配追加/插入
3.7 文件末尾追加
3.8 追加多行(用反斜杠续行)
4) 常用一览(Cheat Sheet)
5) Advanced Tips
- 可移植性(GNU vs BSD/macOS)
- ERE:GNU 用
r,BSD/macOS 用E - 原地:GNU 允许
i无参数,BSD/macOS 需要i ''
- 性能
- 大文件处理前,可设
LC_ALL=C加速基于字节的匹配:
LC_ALL=C sed -n '/pattern/p' big.txt- 分隔符选择
s|||可避免替换路径时的过度转义:s|/old/path|/new/path|g
- 与其它工具组合
- 预过滤用
grep,复杂列/聚合交给awk,sed负责模式编辑与小改动
- 多平台换行
- 处理 Windows 文本可先:
sed -E 's/\r$//' file.txt(去 CR)
6) Problems & Solutions
- 问题:正则不起作用或过度转义
- 解决:使用
E/-r启用 ERE;替换分隔符改为|;检查\(\)是否在 BRE/ERE 下匹配
- 问题:原地失败(macOS)
- 解决:使用
i '';或先输出到临时文件再mv覆盖
- 问题:只替换每行第 N 次出现
- 解决:
s/old/new/2只替换第2次出现;g为全部
- 问题:跨行需求
- 解决:
sed以行为单位;复杂跨行逻辑可考虑awk/perl/python
7) 使用场景(你给的案例整合)
- 文件处理
- 日志分析
- 批量替换
- 与管道结合
8) Learning Resources
- GNU sed Manual(权威文档)
- The Grymoire sed 教程(实践友好)
- “sed one-liners” 速查(经典技巧集合)
- Stack Overflow
sed标签 Wiki(常见坑与最佳实践)
Prev
Linux grep 工具笔记
Next
Linux awk 工具笔记
Loading...
YouTube 使用笔记