在 Linux 系统中,sedStream Editor)是一个非常强大且灵活的文本处理工具。它不仅可以用于简单的文本替换、删除和插入操作,还能实现复杂的文本转换任务。


📌 一、什么是 sed?

sed 是一个基于模式匹配对文本进行过滤或修改的流编辑器。它可以:

  • 替换文本内容
  • 删除指定行
  • 插入或追加新内容
  • 打印特定行
  • 使用正则表达式进行高级匹配
  • 多条命令组合处理

与交互式编辑器(如 vim)不同,sed 是非交互式的,适合在脚本中自动执行批量文本处理任务。


🔧 二、sed 基本语法

sed [选项] '命令' 文件名

示例:

sed 's/old/new/' file.txt

表示将 file.txt 中每一行的第一个 old 替换为 new


🧱 三、常用命令格式说明

命令含义
s/pattern/replacement/flags替换命令(最常用)
d删除匹配的行
p打印匹配的行(常与 -n 搭配使用)
i\text在匹配行前插入文本
a\text在匹配行后追加文本
c\text替换整行内容
y/abc/xyz/字符替换(一一对应)

📚 四、实战示例

✅ 示例 1:替换第一个匹配项(s 命令)

📄 原始内容(input.txt):
hello world
hello there
🔧 使用命令:
sed 's/hello/hi/' input.txt
✅ 输出结果:
hi world
hi there

只替换每行中第一个出现的 hello


✅ 示例 2:替换所有匹配项(加 g 标志)

📄 原始内容(input.txt):
hello world hello
hello again
🔧 使用命令:
sed 's/hello/hi/g' input.txt
✅ 输出结果:
hi world hi
hi again

g 表示全局替换,替换该行中所有匹配项。


✅ 示例 3:删除某一行(d 命令)

📄 原始内容(input.txt):
apple
banana
orange
🔧 使用命令:
sed '2d' input.txt
✅ 输出结果:
apple
orange

删除第 2 行(banana)。


✅ 示例 4:删除包含某个关键词的行(/pattern/d

📄 原始内容(input.txt):
error: failed to connect
success: connection ok
error: timeout
🔧 使用命令:
sed '/error/d' input.txt
✅ 输出结果:
success: connection ok

删除所有包含 error 的行。


✅ 示例 5:打印特定行(-n + p

📄 原始内容(input.txt):
line one
line two
line three
🔧 使用命令:
sed -n '2p' input.txt
✅ 输出结果:
line two

只打印第 2 行。-n 阻止默认输出,p 显式打印指定行。


✅ 示例 6:在匹配行前插入内容(i\

📄 原始内容(input.txt):
header line
data line
footer line
🔧 使用命令:
sed '/data/i\--- INSERTED LINE ---' input.txt
✅ 输出结果:
header line
--- INSERTED LINE ---
data line
footer line

在包含 data 的行前面插入新内容。


✅ 示例 7:在匹配行后追加内容(a\

📄 原始内容(input.txt):
start section
some data
end section
🔧 使用命令:
sed '/end/a\--- APPENDED LINE ---' input.txt
✅ 输出结果:
start section
some data
end section
--- APPENDED LINE ---

在包含 end 的行后面追加新内容。


✅ 示例 8:替换整行内容(c\

📄 原始内容(input.txt):
old config value
new config value
🔧 使用命令:
sed '/old/c\updated config value' input.txt
✅ 输出结果:
updated config value
new config value

替换整行内容。


✅ 示例 9:字符替换(y/abc/xyz/

📄 原始内容(input.txt):
abc def ghi
🔧 使用命令:
sed 'y/abc/xyz/' input.txt
✅ 输出结果:
zyx def ghi

a->z, b->y, c->x 一一替换。


✅ 示例 10:删除空行(/^$/d

📄 原始内容(input.txt):
This is a line.Another line.
🔧 使用命令:
sed '/^$/d' input.txt
✅ 输出结果:
This is a line.
Another line.

删除空白行。


✅ 示例 11:删除注释行(以 # 开头)

📄 原始内容(input.txt):
# comment line
valid line
# another comment
🔧 使用命令:
sed '/^#/d' input.txt
✅ 输出结果:
valid line

删除以 # 开头的注释行。


✅ 示例 12:给每行加行号(结合两个 sed 命令)

📄 原始内容(input.txt):
apple
banana
cherry
🔧 使用命令:
sed '=' input.txt | sed 'N;s/\n/ /'
✅ 输出结果:
1 apple
2 banana
3 cherry

给每行加上行号。


✅ 示例 13:提取两个关键字之间的内容

📄 原始内容(input.txt):
start_key
line one
line two
end_key
another line
🔧 使用命令:
sed -n '/start_key/,/end_key/p' input.txt
✅ 输出结果:
start_key
line one
line two
end_key

提取从 start_keyend_key 之间的段落。


✅ 示例 14:变量替换(配置文件更新)

📄 原始内容(config.ini):
server=127.0.0.1
port=8080
enabled=true
🔧 使用命令:
sed 's/^port=.*/port=9090/' config.ini
✅ 输出结果:
server=127.0.0.1
port=9090
enabled=true

替换配置文件中的端口号。


💾 五、保存修改

默认情况下,sed 不会修改原文件,只是输出结果。如果需要保存更改,可以结合重定向:

sed 's/old/new/g' input.txt > output.txt

或者使用 -i 参数直接修改原文件(慎用):

sed -i 's/old/new/g' input.txt

你可以添加 .bak 后缀来备份原文件:

sed -i.bak 's/old/new/g' input.txt

🧪 六、总结

sed 是 Linux 下非常实用的文本处理利器,掌握其基本命令和正则表达式技巧,可以大幅提升你在日常运维、日志分析、自动化脚本编写等方面的效率。

记住一句话:

grep 查找,sed 修改,awk 分析 —— 这就是 Linux 文本处理三剑客!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/87995.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87995.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/87995.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目进度同步不及时,如何提升信息透明度

项目进度同步不及时的核心问题包括沟通渠道不畅通、缺乏统一的信息平台、未建立明确的进度更新机制、团队意识不足、责任划分不明确等。其中,缺乏统一的信息平台最为关键。统一的信息平台能够确保所有相关人员实时掌握最新的进度状态,避免信息孤岛&#…

使用各种CSS美化网页

实验目的1.理解CSS的概念,掌握CSS定义样式的方法,具备使用CSS和相关库进行界面样式设计的能力。 2.掌握Bootstrap 5的基本使用方法。3.Bootstrap框架练习实验步骤1. 实验准备创建一个HTML文件(如 index.html)。引入Bootstrap5的CS…

在PPT的文本框中,解决一打字,英文双引号就变成中文了

问题:在制作PPT的过程中,插入文本框,在里面输入代码类的格式时,使用英文的双引号"",但是只要在后面输入内容,或者逗号等,英文双引号就变成中文了,很烦原因:大概…

iOS 证书过期如何处理

找到钥匙串位置创建新的CSR文件。点击菜单中钥匙串访问—>证书助理—>从证书颁发机构请求证书…进入证书助理,填写信息(用户名称和邮箱随便写),请求是 选择 存储到磁盘创建好CSR文件,回到developer 证书管理中心…

CODESYS + 全志T113-i + 国产系统OneOS,打造新一代工业控制解决方案!

创龙科技与中移物联网有限公司、CODESYS携手合作,成功实现了T113-i工业评估板对国产系统OneOS CODESYS软件的适配,此举将让工业自动化领域的工程师们更高效地开发,并为众多企业产品的快速上市提供强有力的保障。 解决方案简介 CODESYS简介 …

三、jenkins使用tomcat部署项目

一、安装tomcattomcat本来应该是第3台服务器的(第一台:gitlab,第二台:jenkins,第三台:tomcat),我这里资源有限,就把tomcat安装jenkins服务器了。#解压tocmcat [rootbogon…

华为eNSP防火墙实验(包含详细步骤)

拓扑图 这里要用的防火墙是 , 需要导入 目录 防火墙配置1(启动图形化界面) cloud配置 缓冲区服务器配置 防火墙配置2(各端口的ip地址) 外部路由器配置 本地路由器配置 防火墙配置3(配置安全策略&a…

Linux/Unix线程及其同步(create、wait、exit、互斥锁、条件变量、多线程)

线程 文章目录线程I 线程基本概念1、为什么引入线程2、PthreadsII 线程基本操作1、创建线程2、终止线程3、线程ID4、连接已终止线程5、线程基本操作示例III 通过互斥量同步线程1、基本概念2、互斥量(Mutex)3、静态分配互斥量4、互斥量锁定与解锁5、互斥量…

vue3 el-table 行数据沾满格 取消自动换行

在 Vue.js 使用 Element UI 或 Element Plus 的 <el-table> 组件时&#xff0c;如果你希望其中的单元格内容不自动换行&#xff0c;可以通过设置 CSS 样式来实现。这里有几种方法可以做到这一点&#xff1a;方法1&#xff1a;使用 CSS 样式你可以直接在 <el-table-col…

操作系统级TCP性能优化:高并发场景下的内核参数调优实践

在高并发网络场景中&#xff0c;操作系统内核的TCP/IP协议栈配置对系统性能起着决定性作用。本文聚焦操作系统层面&#xff0c;深入解析内核参数调优策略&#xff0c;帮助读者构建稳定高效的网络通信架构。 一、连接管理参数优化&#xff1a;从三次握手到队列控制 1.1 监听队列…

基于物联网的智能交通灯控制系统设计

标题:基于物联网的智能交通灯控制系统设计内容:1.摘要 摘要&#xff1a;随着城市交通流量的不断增加&#xff0c;传统交通灯控制方式已难以满足高效交通管理的需求。本研究的目的是设计一种基于物联网的智能交通灯控制系统。方法上&#xff0c;该系统利用物联网技术&#xff0c…

nodejs中使用UDP传递信息

什么是UDP?UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;是一种无连接的网络传输协议&#xff0c;位于 OSI 模型的传输层&#xff08;第四层&#xff09;&#xff0c;与 TCP&#xff08;传输控制协议&#xff09;同为互联网的核心协议之一。它…

App Trace功能实战:一键拉起应用实践

一、App Trace功能概述App Trace是一种用于监控和分析应用启动流程的技术&#xff0c;它可以帮助开发者&#xff1a;追踪应用冷启动/热启动的全过程分析启动过程中的性能瓶颈优化应用启动速度实现应用间的快速拉起二、一键拉起应用的实现方案1. Android平台实现方案1&#xff1…

Flink ClickHouse 连接器数据读取源码深度解析

一、引言 在大数据处理流程中&#xff0c;从存储系统中高效读取数据是进行后续分析的基础。Flink ClickHouse 连接器为我们提供了从 ClickHouse 数据库读取数据的能力&#xff0c;使得我们可以将 ClickHouse 中存储的海量数据引入到 Flink 流处理或批处理作业中进行进一步的分析…

云原生技术与应用-容器技术技术入门与Docker环境部署

目录 一.Docker概述 1.什么是Docker 2.Docker的优势 3.Docker的应用场景 4.Docker核心概念 二.Docker安装 1.本安装方式使用阿里的软件仓库 2.Docker镜像操作 3.Docker容器操作 一.Docker概述 因为 Docker 轻便、快速的特性&#xff0c;可以使应用达到快速迭代的目的。每次小…

第2章,[标签 Win32] :匈牙利标记法

专栏导航 上一篇&#xff1a;第2章&#xff0c;[标签 Win32] &#xff1a;Windows 数据类型 回到目录 下一篇&#xff1a;第2章&#xff0c;[标签 Win32] &#xff1a;兼容 ASCII 字符与宽字符的 Windows 函数调用 本节前言 在初学编程的时候&#xff0c;我们给变量命令的…

从深度学习的角度看自动驾驶

从深度学习的角度看自动驾驶 A Survey of Autonomous Driving from a Deep Learning Perspective 我们探讨了深度学习在自主驾驶中的关键模块&#xff0c;例如感知&#xff0c;预测&#xff0c;规划以及控制。我们研究了自主系统的体系结构&#xff0c;分析了如何从模块化&…

java+vue+SpringBoo基于Hadoop的物品租赁系统(程序+数据库+报告+部署教程+答辩指导)

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿ppt部署教程代码讲解代码时间修改工具 技术实现 开发语言&#xff1a;后端&#xff1a;Java 前端&#xff1a;vue框架&#xff1a;springboot数据库&#xff1a;mysql 开发工具 JDK版本&#xff1a;JDK1.8 数…

【文献笔记】Automatic Chain of Thought Prompting in Large Language Models

Automatic Chain of Thought Prompting in Large Language Models 原文代码&#xff1a;https://github.com/amazon-research/auto-cot 标题翻译&#xff1a;大规模语言模型中的自动思维链提示 1. 内容介绍 在提示词中提供思考步骤被称为思维链&#xff08;CoT&#xff09;&…

【Behavior Tree】-- 行为树AI逻辑实现- Unity 游戏引擎实现

行为树简易敌人AI 前言&#xff1a; 有些天没更新新文章了&#xff0c;主要是最近科一有些头疼&#xff0c;而且最近琢磨这个行为树代码有些难受&#xff0c;但是终于熬出头了&#xff0c;MonoGame的系列会继续更新的&#xff0c;今天不说别的就说困扰我两三天的行为树 有限状态…