文本三剑客之 sed 编辑器
一.sed 概述
1.sed 介绍
sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个
命令文本文件中。
2.sed 的工作流程
读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。
执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed 命令 将会在所有的行上依次执行。
显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。
在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。
注意:默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。
3.常用的选项
-e 或--expression=:表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用-f 或--file=:表示用指定的脚本文件来处理输入的文本文件。-h 或--help:显示帮助。-n --quiet 或 silent:禁止sed编辑器输出,但可以与p命令一起使用完成输出。p 打印功能-i 直接修改目标文本文件。
4.命令格式
sed -e '操作命令' 目标文件 .... #在命令行指定操作命令处理文件行数据
sed -e '操作' 文件1 文件2 ...sed -n -e '操作' 文件1 文件2 ...sed -f 脚本文件 文件1 文件2 ...sed -i -e '操作' 文件1 文件2 ...sed -e 'n{
操作1
操作2
...
}' 文件1 文件2 ...
二.sed 的常用操作
s:替换,替换指定字符。d:删除,删除选定的行。a:增加,在当前行下面增加一行指定内容。i:插入,在选定行上面插入一行指定内容。c:替换,将选定行替换为指定内容。y:字符转换,转换前后的字符长度必须相同。p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;
如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用。=:打印行号。l(小写L):打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)
1.打印内容功能
(1)sed 的 p 选项
打印内容 p(打印行内容) =(打印行号) l(打印ASCII字符)






(2)打印指定的地址
sed编辑器有2种寻址方式:
【1】以数字形式表示行区间
【2】用文本模式来过滤出行




sed -n -e 'n;p' test1.txt 的演示过程
第一次过程 读取 第一行 执行 先n 跳到到下一行 (第二行) 再p 打印第二行内容
第二次过程 读取 第三行 执行 先n 跳到到下一行 (第四行) 再p 打印第四行内容
第三次过程 读取 第五行 执行 先n 跳到到下一行 (第六行) 再p 打印第六行内容
sed -n -e '2,${n;p}' test1.txt
第一次过程 读取 第二行 执行 先n 跳到下一行 (第三行) 再p 打印第三行内容
第二次过程 读取 第四行 执行 先n 跳到下一行 (第五行) 再p 打印第五行内容
第三次过程 读取 第六行 执行 先n 跳到下一行 (第七行) 再p 打印第七行内容




sed 默认只支持默认正则表达式使用,想要使用扩展表达式需要加上 - r 选项

联合使用


2. 删除功能
sed 的 的选项








拓展:在一个脚本文件里定义操作命令
sed -f 脚本文件 目标文件 ....
使用指定脚本文件里的操作命令处理文件行数据
提前在文件里定义一个操作可以指定文件加上 - f 选项进行操作处理;也可以进行多行操作。
vim a.shp;n

vim a.txt=p;n

拓展2:sed -i
3.替换功能
替换 s(字符串替换) c(整行内容替换) y(对应字符替换)
行范围 s/旧字符串/新字符串/替换标记
4种替换标记:
数字: 表明新字符串将替换第几处匹配的地方
g: 表明新字符串将会替换所有匹配的地方
p: 打印与替换命令匹配的行,与-n一起使用
w 文件: 将替换的结果写到文件中


如果想要删除root字符

如果想要删除 /etc/yum.conf 文件里的第15行到第26行删除注释
如果想要/etc/yum.conf 文件里第1行到第12行加上注释


如果想要只注释 /etc/fstab 文件里的 swap


如果想要给编辑的文件新保存;可以使用重定向输出的方式,也可以通过sed 命令 w 操作来保存,不过只会保存修改的内容。
sed 's/.*swap.*/#&/w /opt/fstab2' /etc/fstab
拓展:/ 可以被替换
sed -e 's/\bin\/bash/\/sbin\/nologin/g' /etc/passwdsed -e 's#bin/bash#/sbin/nologin#g' /etc/passwd两者效果一样, / 可以替换成任意符号都可以做到替代\的作用
sed 's9\945\9\99\98\939g' test.txt 的含义将\954\9\9 替换成 \98\93
替换的高级功能

sed -e '行号c 新行内容'
sed -e '/字符串/c 新行内容'

sed -e 'y/旧字符/新字符/'

4.插入功能
a(在指定行下面插入行内容)
i(在指定行上面插入行内容)
r(在指定行下面插入整个文件内容)
sed -e '行号区间a 行内容'
sed -r -e '/字符串或正则/a 行内容'sed -e '行号区间i 行内容'
sed -r -e '/字符串或正则/i 行内容'sed -e '行号区间r 文件'



读入文件内容

5.复制粘贴功能
H(复制指定行到剪切板) G(将剪切板内容粘贴到指定行下面)
sed -e '1,3H;$G' #将1-3行内容复制粘贴到最后一行下面sed -e '1,3{H;d};$G' #将1-3行内容剪切粘贴到最后一行下面


拓展:将echo 11122233 替换成 321321321;将每个字符用()括起来重新用 \ 分配位置即可
相关文章:
文本三剑客之 sed 编辑器
一.sed 概述 1.sed 介绍 sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个 命令文本文件中。 2.sed 的工…...
【MySQL精通之路】SQL优化(1)-查询优化(3)-索引合并
主博客: 【MySQL精通之路】SQL优化(1)-CSDN博客 上一篇: 【MySQL精通之路】SQL优化(1)-查询优化(2)-范围查询优化-CSDN博客 下一篇: 目录 1.索引合并-交集访问算法 2.索引合并联合访问算法 3.索引合并-排序联合访问算法 4.影响索引合…...
Linux中安装配置并使用samba服务(Centos以及Ubuntu)
目录 前言1. 基本知识2. Centos3. Ubuntu3.1 物理服务器3.2 云服务器前言 在window与linux系统中配置一个共享文件夹,可以做很多时间,比如映射器或者像linux中定时存放文件等 1. 基本知识 在Ubuntu上安装和配置Samba服务可以让你的Ubuntu机器与Windows、macOS以及其他Linu…...
three.js能实现啥效果?看过来,这里都是它的菜(06)
这是第五期了,本期继续分享three.js可以实现的3D动画案例,有老铁反馈再发案例的时候,是否可以顺道分享一下three.js的知识点,好吧,安排。 材质动画 材质动画可以实现各种复杂的视觉效果,包括但不限于以下…...
利用ESP32-C3将TF卡内容变成U盘进行读取
利用ESP32-C3将TF卡内容变成U盘进行读取 ESP32-C3是一款高性价比的微控制器,具备WiFi和蓝牙功能,广泛应用于物联网(IoT)项目中。除了常见的无线通信功能外,ESP32-C3还可以用来模拟U盘读取TF卡内容。本文将介绍如何通过…...
C++小病毒
C小病毒(注:对电脑无过大伤害) 短短行,创造奇迹! 把这个文件命名为virus.exe就可以使用了。 #include<bits/stdc.h> #include<windows.h> using namespace std; int main() {HWND hwnd GetForegroundW…...
使用VUE3+TS+elementplus创建一个增加按钮
一、前言 在上一篇文章中分享了创建table的过程,详见(VUE3TSelementplus创建table,纯前端的table),本文在创建好的table的基础上,再创建一个增加按钮。 二、程序展示 1、前面创建table的程序 <templ…...
Python面试宝典:文件读写和上下文管理器以及输入输出流面试题(1000加python面试题助你轻松捕获大厂Offer)
Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第一部分:Python基础:第八章:文件操作和输入输出:第一节:文件读写和上下文管理器以及输入输出流】 第八章:文件操作和输入输出第一节:文件读写和上下文管理器以及输入输出流1.1、文件读写基本操作1.1.1、打开…...
Spring Boot | Spring Boot 实现 “记住我“ 功能
目录: 一、SpringBoot 中 自定义 "用户授权管理" ( 总体内容介绍 )二、实现 "记住我" 功能 ( 通过 "HttpSecurity类" 的 rememberMe( )方法来实现 "记住我" 功能 ) :2.1 基于 "简单加密 Token" 的方式 ( 实现 "记住我&…...
AGM AG32 MCU替代GD32F407/STM32F407的手持示波器方案
一、AG32 MCU替代GD32F407/STM32F407的数字示波器方案 市场上有多款数字迷你示波器,特别小巧,携带非常方便。单通道,标注100Mhz带宽,500MS采样率。 这样高的采样率需要使用高速AD及很高性能的处理器。原方案使用AD9288双通道8bit …...
MongoDB基础入门到深入(八)MongoDB整合SpringBoot、Chang Streams
文章目录 系列文章索引十五、MongoDB整合SpringBoot1、环境准备2、集合操作3、文档操作(1)相关注解(2)创建实体(3)添加文档(4)查询文档(5)更新文档࿰…...
linux下的nfs概述与实验(openEuler22.03)
目录 什么是NFSNFS工作原理NFS常用文件/etc/exports文件/etc/exports格式 /var/lib/nfs/etab文件 NFS常用选项NFS配置方式1. 安装NFS和RPC2. 启动rpcbind和nfs3. 准备目录4. 配置/etc/exports并重启服务5. 连接测试服务端自我测试客户端测试 补充常用命令永久挂载注意 什么是NF…...
影响Oracle数据库打开速度的因素
当Oracle发起一个事务需要更改数据时,如果所涉及的数据块不在BUFFER CACHE中,那么Oracle服务进程首先会将相关数据块从数据文件中读进BUFFER CACHE进行更改(直接路径读除外),更改后的数据块称之为脏块(DIRT…...
dify:开源 LLMOps平台。
单纯笔记: 一、关于 Dify dify/README_CN.md at main langgenius/dify GitHub Dify 是一款开源的大语言模型(LLM)应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以…...
CCF20220601——归一化处理
CCF20220601——归一化处理 代码如下: #include<bits/stdc.h> using namespace std; int main() {int n,a[1000],sum0;scanf("%d",&n);for(int i1;i<n;i){scanf("%d",&a[i]);suma[i];}double aver1.0,b0.0,d1.0;aversum/(n*1…...
用Ai编写一个电机驱动程序
问:帮我写一个步进电机的控制程序,要有包括加减速,以及电机步中断处理函数。 答:编写一个步进电机的控制程序涉及到硬件层面的操作,通常需要依赖特定的硬件平台和相应的驱动程序。以下是一个简化的示例,它展…...
【C++入门】—— C++入门 (下)_内联函数
前言:在了解完前面的C基础内容后,马上我们就要真正不如C的学习了,但在之前让我们最后了解最后一点点C入门知识!来迟的520特别篇! 本篇主要内容: 内联函数 auto关键字 范围for 指针空值nullptr C入门 1. 内联…...
Java数据结构与算法(最小栈)
前言 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。i…...
7 Series FPGAs Integrated Block for PCI Express IP核 Advanced模式配置详解(三)
1 TL Settings Transaction Layer (TL)设置只在Advanced模式下有效。 Endpoint: Unlock and PME_Turn_Off Messages: 与端点的电源管理相关,允许发送解锁和电源管理事件关闭消息。 Root Port: Error Messages: Error Correctable(错误可纠正)…...
k8s 部署mqtt简介
在Kubernetes(K8s)中部署MQTT(Message Queuing Telemetry Transport)服务通常涉及以下几个步骤: 选择MQTT Broker MQTT Broker是MQTT消息传递的中间件。流行的MQTT Broker包括Mosquitto, HiveMQ, EMQ X等。你需要选择一…...
AI开发AI:借助快马多模型能力,迭代式构建你的智能健康管理Agent
最近在尝试开发一个健康管理AI助手,发现用传统方式写代码调试特别耗时。后来尝试了InsCode(快马)平台,发现用AI对话的方式迭代开发简直打开了新世界。记录下这个"用AI开发AI"的完整过程: 基础框架搭建 最开始只需要一个能交互的对话…...
通过配置驱动前端页面的实现方法
通过配置驱动前端页面的实现方法 配置驱动开发(Configuration-Driven Development, CDD)是一种通过外部配置而非硬编码来控制应用行为的开发模式。在前端领域,这种模式可以显著提升页面灵活性和可维护性。以下是具体实现方案: 理解…...
IO-Link物理层深度解析:编码机制与接口设计实战
1. IO-Link物理层编码机制详解 第一次接触IO-Link的开发者往往会被它的11bit编码规则绕晕。我刚开始调试STM32的IO-Link主站时,就因为在UART配置上少勾选了一个校验位,导致从站设备死活不响应。后来用逻辑分析仪抓包才发现,原来发送的0xF1在…...
DeepSeek-Coder-V2-Lite-Instruct评估指标详解:代码准确率、效率与创新性
DeepSeek-Coder-V2-Lite-Instruct评估指标详解:代码准确率、效率与创新性 【免费下载链接】DeepSeek-Coder-V2-Lite-Instruct 开源代码智能利器——DeepSeek-Coder-V2,性能比肩GPT4-Turbo,全面支持338种编程语言,128K超长上下文&a…...
Conda环境回滚实战:当安装新包搞崩base环境时如何一键恢复
Conda环境回滚实战:当安装新包搞崩base环境时如何一键恢复 在Python开发中,conda作为包管理和环境管理的利器,几乎成为数据科学家的标配工具。但越是频繁使用conda,越容易遇到一个令人头疼的问题——在base环境中安装新包后&#…...
OpCore-Simplify:如何将黑苹果EFI配置从3小时缩短到15分钟?
OpCore-Simplify:如何将黑苹果EFI配置从3小时缩短到15分钟? 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 在开源系统定制领域…...
5分钟掌握SQLite在线查看器:浏览器中的数据库管理革命
5分钟掌握SQLite在线查看器:浏览器中的数据库管理革命 【免费下载链接】sqlite-viewer View SQLite file online 项目地址: https://gitcode.com/gh_mirrors/sq/sqlite-viewer 在数据驱动的时代,SQLite数据库无处不在——从移动应用到嵌入式设备&…...
2025年9月中国电子学会青少年软件编程(图形化)等级考试试卷(一级)答案 + 解析
25年3月一级真题在线测评:http://jw.52coding.site/s/mwIJDR 青少年软件编程(图形化)等级考试试卷(一级) 一、单选题(共25题,共50分) 1.当前舞台背景为最后一个背景“背景3”,使用“下一个背景”…...
数学动画音频同步:让几何图形随音乐起舞的技术实现
数学动画音频同步:让几何图形随音乐起舞的技术实现 【免费下载链接】manim A community-maintained Python framework for creating mathematical animations. 项目地址: https://gitcode.com/GitHub_Trending/man/manim 在数学可视化领域,Manim…...
Claude Code 源码泄露深度剖析,Anthropic AI 编程助手的架构全解密
2026年3月31日,整个AI开发圈被一条消息炸开了锅。安全研究员Chaofan Shou(推特账号Fried_rice)在Anthropic官方发布的npm包中,意外发现了一个暴露的.map文件,正是这个看似不起眼的文件,直接泄露了Claude Co…...

