给大家拓展一个知识点。
下面是对 Linux 中 sed
命令 的全面整理,涵盖其常用语法、功能和高级用法,非常适合查阅和实践。
🧠 什么是 sed
?
sed
(Stream Editor) 是 Linux 中的强大文本处理工具,用于按照指定的规则对文件或文本流进行替换、删除、插入、打印等操作,无需打开文件即可批量修改内容。
🔰 基本语法
bash
sed [选项] '命令' 文件名
或配合管道:
bash
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 次匹配:
bash
sed 's/foo/bar/2' file # 仅替换每行第 2 个 foo
✅ 替换某一行:
bash
sed '5s/abc/ABC/' file # 只在第 5 行替换 abc → ABC
✅ 替换范围内的内容:
bash
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' |
💡 实用场景示例
✅ 批量替换文件中的字符串(并保存修改)
bash
sed -i 's/localhost/127.0.0.1/g' config.txt
✅ 删除空行:
bash
sed '/^$/d' file.txt
✅ 删除开头是 #
的注释行:
bash
sed '/^#/d' file.txt
✅ 提取某个字段(例如冒号后字段):
bash
sed 's/.*: //' file.txt
🧪 与正则表达式结合(增强匹配能力)
正则模式 | 含义 |
---|---|
^ |
匹配行首 |
$ |
匹配行尾 |
. |
匹配任意一个字符 |
* |
匹配前一个字符 0 次或多次 |
\{n,m\} |
匹配前一个字符 n 到 m 次 |
[] |
字符集,如 [a-z] |
\( \) |
分组匹配,用于后向引用 |
\1 , \2 |
引用前面的分组 |
示例:
bash
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 |
替换整行为新内容 |