给大家拓展一个知识点。
下面是对 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 | 
替换整行为新内容 |