当前位置: 首页 > news >正文

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 的区别

特性sedawk
核心用途文本流编辑器(替换/插入/删除)数据分析与格式化(按列处理)
使用场景修改内容为主分列、聚合、数学操作为主
可读性简洁但略难读结构清晰,可像脚本一样编写


✅ 小结

类别命令关键字说明
替换s/old/new/替换 old 为 new
删除d删除指定行或匹配行
打印p显示指定行或匹配行
插入i, a在某行前后插入内容
替换整行c替换整行为新内容
http://www.dtcms.com/a/272583.html

相关文章:

  • RedisJSON 路径语法深度解析与实战
  • Spring Boot + Javacv-platform:解锁音视频处理的多元场景
  • 【TCP/IP】12. 文件传输协议
  • MySQL索引操作全指南:创建、查看、优化
  • Debian-10编译安装Mysql-5.7.44 笔记250706
  • macOS 上安装 Miniconda + Conda-Forge
  • Jekyll + Chirpy + GitHub Pages 搭建博客
  • 如何使用Java WebSocket API实现客户端和服务器端的通信?
  • 蓝桥杯第十六届(2025)真题深度解析:思路复盘与代码实战
  • MinerU将PDF转成md文件,并分拣图片
  • Alibaba Druid主要配置
  • 图片合并pdf
  • 新手向:实现ATM模拟系统
  • TDengine 数据库建模最佳实践
  • Oracle 视图
  • Tomcat:Java Web应用的幕后英雄
  • 线性探针是什么:是一种用于探测神经网络中特定特征的工具
  • 从零开始搭建深度学习大厦系列-3.卷积神经网络基础(5-9)
  • 李宏毅(深度学习)--(2)
  • 数据库复合索引设计:为什么等值查询列应该放在范围查询列前面?
  • 区间动态规划详解
  • 【JMeter】跨线程组传递参数
  • 在Docker中运行macOS的超方便体验!
  • SpringAI×Ollama:Java生态无缝集成本地大模型实践指南
  • Redis数据库基础概述
  • 8.2.3希尔排序
  • Spring for Apache Pulsar->Reactive Support->Message Production
  • KV Cache原理详解 + 代码理解
  • 从零实现一个GPT 【React + Express】--- 【2】实现对话流和停止生成
  • Pytest之收集用例规则与运行指定用例