【shell 编程大全】sed详解

news2024/10/2 12:36:30

sed详解

1. 概述

今天单独拉出一章来讲述下sed命令。因为sed命令确实内容太多,不过也是比较灵活的,好了不废话了。我们开始吧

1.2 原理解析

shell脚本虽然功能很多,但是它最常用的功能还是处理文本文件,尤其是在正常的业务操作流程场景中,比如检查日志文件、读取配置、处理数据等现象,虽然我们能够使用echo、cat、<<、>>、|等符号实现文件内容的操作,但是整个过程有些繁琐。所以我们需要一种更为轻便的文本编辑工具,sed就是其中的一种。
简介

在这里插入图片描述

2. 基本格式

2.1 轮廓格式

基本格式	
	sed [参数] '<匹配条件> [动作]' [文件名]
注意:
	匹配条件和动作两侧有'
	动作可以有多个,彼此间使用;隔开,比如 '2p;4p'

2.2 参数

参数详解:
    参数为空	 表示sed的操作效果,实际上不对文件进行编辑,缓存区所有信息都显示
    -n			不输出模式空间内容到屏幕,即不自动打印所有内容
    -e			基于命令实现对文件的多点编辑操作
    -f			从指定文件中读取编辑文件的”匹配条件+动作”
    -r			支持使用扩展正则表达式
    -i.bak		复制文件原内容到备份文件,然后对原文件编辑
    -i			表示对文件进行编辑

注意:
   mac版本的bash中使用 -i参数,必须在后面单独加个东西: -i ''
    -i -r 支持  -ri   支持
    -ir   不支持
    -ni   危险选项,会清空文件

2.3 行数匹配

匹配条件分为两种:数字行号或者关键字匹配
数字行号:
	空 表示所有行				n 表示第n行				$ 表示末尾行
	n,m 表示第n到m行内容		n,+m 表示第n到n+m行
	~步进	1~2 表示奇数行		2~2 表示偶数行

关键字匹配格式:
	'/关键字/'
    注意:
        隔离符号 / 可以更换成 @、#、!等符号
        根据情况使用,如果关键字和隔离符号有冲突,就更换成其他的符号即可。
        /关键字1/,/关键字2/ 表示关键字1所在行到关键字2所在行之间的内容
        n,/关键字2/ 表示从第n行到关键字2所在行之间的内容

2.4 动作详解

动作详解
    -a[\text]			在匹配到的内容下一行增加内容,支持\n实现多行追加
    -i[\text]			在匹配到的内容当前行增加内容
    -c[\text]			在匹配到的内容替换内容
    -d|p				删除|打印匹配到的内容
    -s					替换匹配到的内容
    W /path/somefile 	保存模式匹配的行至指定文件
    r /path/somefile	读取指定文件的文本至模式空间中
    =					为模式空间中的行打印行号
    !					模式空间中匹配行取反处理
注意:
	上面的动作应该在参数为-i的时候使用,不然的话不会有效果

3. 参数【n】使用详解

不输出模式空间内容到屏幕,即不自动打印所有内容.

3.1 打印指定行数

[root@VM-8-3-centos 20230227]# sed -n '2p' sed.txt
nihao sed4 sed5 sed6
[root@VM-8-3-centos 20230227]#

3.2 过滤IP段 所在行

[root@VM-8-3-centos 20230227]# ifconfig eth0 | sed -n '2p'
        inet 10.0.8.3  netmask 255.255.252.0  broadcast 10.0.11.255
[root@VM-8-3-centos 20230227]#

3.3 正则匹配到内容

[root@VM-8-3-centos 20230227]# sed -n '/sed4/p' sed.txt
nihao sed4 sed5 sed6
[root@VM-8-3-centos 20230227]#

3.4 输出奇数行

[root@VM-8-3-centos 20230227]# sed -n '1~2p' sed.txt
nihao sed1 sed2 sed3
nihao sed7 sed8 sed9

3.5 输出偶数行

[root@VM-8-3-centos 20230227]# sed -n '0~2p' sed.txt
nihao sed4 sed5 sed6
nihao sed10 sed11 sed12

3.6 实现多点输出

[root@VM-8-3-centos 20230227]# sed -n -e '1p' -e '3p' sed.txt
nihao sed1 sed2 sed3
nihao sed7 sed8 sed9
[root@VM-8-3-centos 20230227]#

4. 符号【s】详解(内容替换)

4.1 基本格式

命令格式:
	sed -i [替换格式] [文件名]
	源数据 | sed -i [替换格式]
	
注意:替换命令的写法
	's###'  --->  's#原内容##' ---> 's#原内容#替换后内容#'
	隔离符号 / 可以更换成 @、#、!等符号

4.2 表现形式

表现样式:
    样式一:替换指定匹配的内容
        sed -i '行号s#原内容#替换后内容#列号' [文件名]
        echo "源数据" | sed -i '行号s#原内容#替换后内容#列号'
    样式二:替换所有的内容
        sed -i 's#原内容#替换后内容#g' [文件名]
    	echo "源数据" | sed -i '行号s#原内容#替换后内容#g'
    样式三: 替换指定的内容
    	sed -i '行号s#原内容#&新增信息#列号' [文件名]
    	- 这里的&符号代表源内容,实现的效果是 '原内容+新内容'

4.3 综合案例

4.3.1 替换单个

sed -i "s#sed#SED#" sed.txt

在这里插入图片描述

4.3.2. 替换全部

sed -i "s#sed#SED#g" sed.txt

在这里插入图片描述

4.3.3 指定行号,内容替换

sed -i "2s#sed#SED" sed.txt

在这里插入图片描述

4.3.4 指定列号,内容替换

sed -i "s#sed#SED#2" sed.txt

在这里插入图片描述

5. 符号【a\】增加操作

5.1 基本格式

作用:
	在指定行号的下一行增加内容
格式:
	sed -i '行号a\增加的内容' 文件名
注意:
    如果增加多行,可以在行号位置写个范围值,彼此间使用逗号隔开,例如
    sed -i '1,3a\增加内容' 文件名

5.2 综合实践

5.2.1 单行添加

sed -i '2a\ceshi-2' sed.txt

在这里插入图片描述

5.2.2 多行增加

sed -i '1,3a\ceshi--' sed.txt

在这里插入图片描述

6. 插入操作

6.1 基本格式

作用:
	在指定行号的当行增加内容
格式:
	sed -i '行号i\增加的内容' 文件名
注意:
    如果增加多行,可以在行号位置写个范围值,彼此间使用逗号隔开,例如
    sed -i '1,3i\增加内容' 文件名

6.2 综合案例

6.2.1 多行插入

sed -i '1,2i\ceshi--' sed.txt

在这里插入图片描述

7. 删除操作

7.1 基本格式

作用:
	指定行号删除
格式:
	sed -i '行号d' 文件名
注意:
    如果删除多行,可以在行号位置多写几个行号,彼此间使用逗号隔开,例如
    sed -i '1,3d' 文件名

7.2 综合实践

sed -i '1,2d' sed.txt

在这里插入图片描述

8. 进阶匹配

8.1 基本格式

内容匹配:
	'/关键字内容/'
    注意:
        隔离符号 / 可以更换成 @、#、!等符号
        根据情况使用,如果关键字和隔离符号有冲突,就更换成其他的符号即可。
        /关键字1/,/关键字2/ 表示关键字1所在行到关键字2所在行之间的内容
        n,/关键字2/ 表示从第n行到关键字2所在行之间的内容
        /关键字1/,n, 表示从关键字1所在行到第n行之间的内容
        /关键字1/,+n, 表示从关键字1所在行到(所在行+n行)之间的内容

8.2 综合示例

查看匹配的内容
在这里插入图片描述
多行信息匹配
在这里插入图片描述

匹配内容到第6行内容
在这里插入图片描述

第一个行到匹配的内容
在这里插入图片描述

匹配内容以及下面3行的内容

在这里插入图片描述

9. 修改实践

过滤#开头,以及空行

sed '/^$/d;/^#/d' nginx.conf

在这里插入图片描述

过滤#开头,以及空行。 同时进行备份

sed -i.bak '/^#/d;/^$/d' nginx.conf

在这里插入图片描述

借助& 进行内容替换扩充

head -n 1 /etc/passwd | sed -n 's/root/&user/gp'

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4.3 where关键字过滤查询数据

文章目录1.使用WHERE子句2.WHERE子句操作符2.1 使用单个值2.2 不匹配检查2.3 范围值查询2.4 空值检查3.组合WHERE子句3.1 AND操作符3.2 OR操作符3.3 计算次序4.IN操作符5.NOt关键字&#xff15;.注意事项&#xff15;.1 NULL与不匹配&#xff15;.2 SQL过滤与应用过滤&#xff…

【RSA】HTTPS中SSL/TLS握手时RSA前后端加密流程

SSL/TLS层的位置 SSL/TLS层在网络模型的位置&#xff0c;它属于应用层协议。接管应用层的数据加解密&#xff0c;并通过网络层发送给对方。 SSL/TLS协议分握手协议和记录协议&#xff0c;握手协议用来协商会话参数&#xff08;比如会话密钥、应用层协议等等&#xff09;&…

QT中级(6)基于QT的文件传输工具(2)

QT中级&#xff08;6&#xff09;基于QT的文件传输工具&#xff08;2&#xff09;本文实现第一步1 新增功能2 运行效果3 实现思路4 源代码实现这个文件传输工具大概需要那几步&#xff1f;实现多线程对文件的读写实现TCP客户端和服务端实现网络传输 书接上回&#xff1a;QT中级…

27k入职阿里测开岗那天,我哭了,这5个月付出的一切总算没有白费~

先说一下自己的个人情况&#xff0c;计算机专业&#xff0c;16年普通二本学校毕业&#xff0c;经历过一些失败的工作经历后&#xff0c;经推荐就进入了华为的测试岗&#xff0c;进去才知道是接了个外包项目&#xff0c;不太稳定的样子&#xff0c;可是刚毕业谁知道什么外包不外…

沸点 | 实时图数据库技术将赋能银行数字化转型——访同心尚科技总裁王昊

实时图数据库技术将赋能银行数字化转型 ——访同心尚科技总裁王昊 本报记者 赵萌 全国两会召开在即&#xff0c;近日&#xff0c;在多家媒体或研究机构的两会热点话题预测中&#xff0c;“科技创新”“数字经济”位列其中。如何更好发挥信息科技对支持实体经济发展的放大、叠加…

【运维有小邓】Oracle数据库审计

一些机构通常将客户记录、信用卡信息、财务明细之类的机密业务数据存储在Oracle数据库服务器中。这些数据存储库经常因为内部安全漏洞和外部安全漏洞而受到攻击。对这类敏感数据的任何损害都可能严重降低客户对机构的信任。因此&#xff0c;数据库安全性对于任何IT管理员来说都…

webpack.config.js与package.json文件的配置

path要使用绝对路径&#xff0c;通过每次复制文件位置非常麻烦且容易导致问题 使用node中的 写个包名跟入口名称&#xff0c;其他全部回车 此步完成后&#xff0c;自动生成一个package.json包 licence指的是开源&#xff0c;一般不写 安装文件夹需要的依赖 dirname是node自带…

图注意网络GAT理解及Pytorch代码实现【PyGAT代码详细注释】

文章目录GAT代码实现【PyGAT】GraphAttentionLayer【一个图注意力层实现】用上面实现的单层网络测试加入Multi-head机制的GAT对数据集Cora的处理csr_matrix()处理稀疏矩阵encode_onehot()对label编号build graph邻接矩阵构造GAT的推广GAT 题&#xff1a;Graph Attention Netwo…

Netty之ChannelFuture详解

目录 目标 Netty版本 Netty官方API 客户端如何与服务器建立连接&连接成功后的操作方式 实现 如何处理客户端与服务器连接关闭后的操作 正确关闭连接的方式 方法一 方法二 目标 了解Netty如何处理客户端与服务器之间的连接与关闭问题。 Netty版本 <dependency&…

Kafka系列之:Kafka生产者和消费者

Kafka系列之:Kafka生产者和消费者 一、Kafka生产者发送流程二、提高生产者吞吐量三、Kafka消费方式四、Kafka消费者总体工作流程五、按照时间消费Kafka Topic一、Kafka生产者发送流程 batch.size:只有数据积累到batch.size之后,sender才会发送数据,默认16K。linger.ms:如果…

预热:Eyeshot 2023 Beta 正式版不远 Eyeshot 2023 Fem

预热&#xff1a;Eyeshot 2023 Beta 离正式版不远 Eyeshot 2023 Fem 破解版 devDept Software 自豪地宣布推出新的Eyeshot 2023 Beta版本。 现在已经完成了几次迁移&#xff0c;我们有了一个最终的工作区架构&#xff0c;它不再需要设计/设计用户界面分离的对象。正如我们在迁移…

SMPL可视化大杀器,你并不需要下载SMPL就能可视化你的3D Pose

SMPL 是一种3D人体建模方法&#xff0c;现在几乎所有的元宇宙人体建模都是基于此类方法&#xff0c;包括但不限于元宇宙&#xff0c;自动驾驶等领域。它能估计出比较准确的人体3D姿态&#xff0c;得益于海量数据训练的人体3D先验。不仅仅是人体&#xff0c;包括手部&#xff0c…

【Windows应急响应】HW蓝队必备——开机启动项、临时文件、进程排查、计划任务排查、注册表排查、恶意进程查杀、隐藏账户、webshell查杀等

Windows应急响应应急响应的重要性开机启动项temp文件分析浏览器信息分析文件时间属性分析最近打开文件分析进程分析计划任务隐藏账户的发现添加与删除恶意进程发现及关闭补丁信息webshell查杀应急响应的重要性 近年来信息安全事件频发&#xff0c;信息安全的技能、人才需求大增…

linux + jenkins + svn + maven + node 搭建及部署springboot多模块前后端服务

linux搭建jenkins 基础准备 linux配置jdk、maven&#xff0c;配置系统配置文件 vi /etc/profile配置jdk、maven export JAVA_HOME/usr/java/jdk1.8.0_261-amd64 export CLASSPATH.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport MAVEN_H…

【深入浅出 Yarn 架构与实现】4-6 RM 行为探究 - 申请与分配 Container

本小节介绍应用程序的 ApplicationMaster 在 NodeManager 成功启动并向 ResourceManager 注册后&#xff0c;向 ResourceManager 请求资源&#xff08;Container&#xff09;到获取到资源的整个过程&#xff0c;以及 ResourceManager 内部涉及的主要工作流程。 一、整体流程 …

吴恩达机器学习笔记——线性回归

1.模型描述有训练集数据房子面积和卖出的价钱&#xff0c;我们用这组数据来模拟特定面积的房子能够卖出的价钱。这是一个很明显的监督学习&#xff08;supervised learning&#xff09;的例子&#xff0c;因为我们的训练集里包含了正确的结果&#xff08;即房子的卖价&#xff…

非递归迭代实现二叉树前序,中序,后序遍历

文章目录1. 前序遍历2. 中序遍历3. 后序遍历1. 前序遍历 题目链接 解题思路&#xff1a; 非递归遍历一棵树有两点&#xff1a; 1.左路结点 2.左路结点的右子树 什么意思呢&#xff1f; 我们知道前序遍历是按照根&#xff0c;左子树&#xff0c;右子树来的。所以它是先根&…

js中的原型链

js中原型和原型链&#x1f61a; 1、为什么需要原型链&#xff1f;&#x1f923;&#x1f61a; 凡事都是有一定的需求和原因发展起来的&#xff0c;在ECMA中为什么要提出原型链这个概念呢&#xff1f; 我们知道&#xff0c;创建对象有两种方式。一种是通过字面量来创建&#…

科研 | 论文写作 | 最常用的LaTeX语法

最常用的LaTeX语法1. 行内公式2. 行间公式3. 下标4. 上标5. 公式编号6. 数学公式7. 根号和分式8. 上下标记9. 向量10. 积分、极限、求和、乘积11. 三圆点12. 重音符号13. 矩阵14. 小写希腊字母和大写希腊字母15. 公式组合16. 拆分单个公式1. 行内公式 格式&#xff1a;将公式编…

流计算框架storm概览

Attention: supervison 和 nimbus的状态都实时保存在zookeeper集群中和本地. Enchance, this means you can kill -9 Nimbus or the Supervisors and theyll start back up as nothing happened. Topologies 1. storm jar all-my-code.jar org.apache.storm.MyTopology a…