Linux 中 sed 命令
给大家拓展一个知识点。
下面是对 Linux 中 sed
命令 的全面整理,涵盖其常用语法、功能和高级用法,非常适合查阅和实践。
🧠 什么是 sed
?
sed
(Stream Editor) 是 Linux 中的强大文本处理工具,用于按照指定的规则对文件或文本流进行替换、删除、插入、打印等操作,无需打开文件即可批量修改内容。
🔰 基本语法
sed [选项] '命令' 文件名
或配合管道:
cat file.txt | sed '命令'
🛠️ 常用命令大全
类型 | 命令 & 示例 | 说明 |
---|---|---|
替换 | sed 's/foo/bar/' file | 将首个 foo 替换为 bar(每行) |
替换全部 | sed 's/foo/bar/g' file | 将所有 foo 替换为 bar(全行) |
删除行 | sed '2d' file | 删除第 2 行 |
删除多行 | sed '2,5d' file | 删除第 2 到 5 行 |
删除匹配 | sed '/pattern/d' file | 删除包含 pattern 的所有行 |
打印行 | sed -n '2p' file | 打印第 2 行(-n 阻止默认输出) |
多行打印 | sed -n '2,5p' file | 打印第 2 到 5 行 |
匹配打印 | sed -n '/pattern/p' file | 打印匹配 pattern 的行 |
插入前行 | sed '2i\Hello' file | 在第 2 行前插入 “Hello” |
插入后行 | sed '2a\World' file | 在第 2 行后插入 “World” |
替换整行 | sed '3c\New line content' file | 替换第 3 行为指定内容 |
多命令 | sed -e '1d' -e 's/foo/bar/g' file | 多个 sed 命令一起执行 |
备份替换 | sed -i.bak 's/old/new/g' file | 修改文件并备份原文件 |
原地替换 | sed -i 's/old/new/g' file | 直接修改原文件内容 |
正则模式 | sed -n '/^[a-z]\{3,\}/p' file | 打印 3 个以上小写字母开头的行 |
🎯 替换高级技巧
✅ 替换第 N 次匹配:
sed 's/foo/bar/2' file # 仅替换每行第 2 个 foo
✅ 替换某一行:
sed '5s/abc/ABC/' file # 只在第 5 行替换 abc → ABC
✅ 替换范围内的内容:
sed '2,4s/foo/bar/g' file # 只在第 2-4 行中替换 foo → bar
🔄 插入 & 删除操作
操作 | 命令 |
---|---|
插入前 | sed '3i\This is inserted' |
插入后 | sed '3a\This is inserted' |
替换行 | sed '3c\Replaced line' |
删除行 | sed '3d' |
删除匹配 | sed '/pattern/d' |
💡 实用场景示例
✅ 批量替换文件中的字符串(并保存修改)
sed -i 's/localhost/127.0.0.1/g' config.txt
✅ 删除空行:
sed '/^$/d' file.txt
✅ 删除开头是 #
的注释行:
sed '/^#/d' file.txt
✅ 提取某个字段(例如冒号后字段):
sed 's/.*: //' file.txt
🧪 与正则表达式结合(增强匹配能力)
正则模式 | 含义 |
---|---|
^ | 匹配行首 |
$ | 匹配行尾 |
. | 匹配任意一个字符 |
* | 匹配前一个字符 0 次或多次 |
\{n,m\} | 匹配前一个字符 n 到 m 次 |
[] | 字符集,如 [a-z] |
\( \) | 分组匹配,用于后向引用 |
\1 , \2 | 引用前面的分组 |
示例:
sed -n 's/ID: \([0-9]\+\)/\1/p' file.txt
提取形如
ID: 12345
的数字部分
🆚 与 awk
的区别
特性 | sed | awk |
---|---|---|
核心用途 | 文本流编辑器(替换/插入/删除) | 数据分析与格式化(按列处理) |
使用场景 | 修改内容为主 | 分列、聚合、数学操作为主 |
可读性 | 简洁但略难读 | 结构清晰,可像脚本一样编写 |
✅ 小结
类别 | 命令关键字 | 说明 |
---|---|---|
替换 | s/old/new/ | 替换 old 为 new |
删除 | d | 删除指定行或匹配行 |
打印 | p | 显示指定行或匹配行 |
插入 | i , a | 在某行前后插入内容 |
替换整行 | c | 替换整行为新内容 |