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

【shell 编程大全】sed详解

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'

在这里插入图片描述

相关文章:

【shell 编程大全】sed详解

sed详解1. 概述 今天单独拉出一章来讲述下sed命令。因为sed命令确实内容太多&#xff0c;不过也是比较灵活的&#xff0c;好了不废话了。我们开始吧 1.2 原理解析 shell脚本虽然功能很多&#xff0c;但是它最常用的功能还是处理文本文件&#xff0c;尤其是在正常的业务操作流程…...

关于sudo配置

前言这里做一个小补充&#xff0c;主要讲一下关于利用sudo对指令提权以及普通用户无法使用sudo指令的问题。在前面的文章【Linux】一文掌握Linux权限中&#xff0c;我们讲到了关于权限的一些问题。我们知道root身份下&#xff0c;一切畅通无阻&#xff0c;而权限只是用来限制我…...

EEGLAB处理运动想象脑电数据

最近在看论文时&#xff0c;经常看到作者处理数据的过程&#xff0c;之前都是一代而过&#xff0c;知道怎么处理就可以了&#xff0c;一直没有实践&#xff0c;最近需要一些特殊的数据&#xff0c;需要自己处理出来&#xff0c;这里尝试着自己用MATLAB处理数据&#xff0c;记录…...

span标签的使用场景

目录 前言 一、span标签是什么&#xff1f; 二、span常用 1.可以嵌套a标签。 2.直接使用 3.加样式使用 4.加按钮使用 5.加a标签的综合使用 6.跟table结合使用 总结 前言 本篇章主要记录一下开发日常中&#xff0c;所常遇见的使用span标签的场景。 一、span标签是什么…...

Kafka面试问题总结

kafka架构2.基础概念Producer&#xff08;生产者&#xff09; : 产生消息的一方。Consumer&#xff08;消费者&#xff09; : 消费消息的一方。Broker&#xff08;代理&#xff09; : 可以看作是一个独立的 Kafka 实例。多个 Kafka Broker 组成一个 Kafka Cluster。同时&#x…...

FPGA案例开发手册——基于全志T3+Logos FPGA核心板

前 言 本文档主要提供评估板FPGA端案例测试方法,适用的开发环境为Windows 7 64bit和Windows 10 64bit。 本文案例基于创龙科技的全志T3+Logos FPGA核心板,它是一款基于全志科技T3四核ARM Cortex-A7处理器 + 紫光同创Logos PGL25G/PGL50G FPGA设计的异构多核全国产工业核心板…...

或许你想要的画图工具在这里

之前文章发布后&#xff0c;有小伙伴问下面的画怎么画的&#xff08;偷偷告诉你&#xff0c;其实我是用铅笔水彩笔画的&#xff09;&#xff0c;哈哈&#xff0c;开玩笑了。其实这些图都是用Excalidraw 画出来的。 我们平常不管是工作中&#xff0c;还是在日常写文章&#x…...

2023年功能测试还值得入行吗?

前言 鉴于笔者从13年入行IT行业&#xff0c;经历了只有开发没有测试的阶段&#xff0c;经历了14年只要会基本的功能测试在一线就能薪资过万的阶段&#xff0c;经历了17年只要会一点自动化&#xff0c;会一点性能就能蒙骗过面试官的阶段&#xff0c;更经历了19年所有面试官对于…...

2022-2023山东大学机器学习期末回忆及复习建议

2023年第一次闭卷考试&#xff0c;让我们准备时都很无力&#xff0c;不知道试题究竟是什么难度&#xff0c;是否要掌握手推公式还有一些晦涩的知识点之类的&#xff0c;看到试题才发现其实闭卷也有好处&#xff0c;与往年题相比难度下降了不少。 一、名词解释 1、测试集 2、Boo…...

基于ssm框架实现家庭理财收支系统(源码+数据库+文档)

一、项目简介 本项目是一套基于ssm框架实现家庭理财收支系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c…...

MyBatis - 09 - 自定义映射resultMap

文章目录1 准备工作1.1 建表1.2 创建实体类1.3 引出一个问题方案1方案2方案32.完整代码项目结构EmpMapper接口Emp类SqlSessionUtils工具类EmpMapper.xmljdbc.propertieslog4j.xmlmybatis-config.xmlResultMapTest完整代码在后面 1 准备工作 1.1 建表 t_emp 添加测试数据&…...

springBoot常见面试题(2023最新)

目录前言1.谈谈你对springBoot的理解2.为什么使用springBoot或springBoot的优点3. springBoot与springCloud 区别4.springBoot的核心配置文件有哪些&#xff0c;作用是什么5.springBoot配置文件有几种类型&#xff0c;区别是什么6.什么是热部署&#xff1f;springBoot怎么实现热…...

YOLOv5全面解析教程⑤:计算mAP用到的Numpy函数详解

作者 | Fengwen、BBuf 本文主要介绍在One-YOLOv5项目中计算mAP用到的一些numpy操作&#xff0c;这些numpy操作使用在utils/metrics.py中。本文是《YOLOv5全面解析教程④&#xff1a;目标检测模型精确度评估》的补充&#xff0c;希望能帮助到小伙伴们。 欢迎Star、试用One-YOLOv…...

Linux入门---基本指令(下)

这里写目录标题cattacmorelessheadtail一个思考题datecalfindwhichaliaswhereisgrepzip/unziptarbcuname快捷键tabCTRL c上下键CTRLrcat 这个指令的功能就是显示文件里面的内容&#xff1a; 我们首先使用下面的指令往一个文件里面循环输入内容&#xff1a; cnt0; while [ $c…...

mysql基础操作1

-- 创建数据库CREATE DATABASE st0203;-- 删除数据库DROP DATABASE st0203;-- 删除表DROP TABLE dept;-- 创建表CREATE TABLE dept(did int PRIMARY KEY auto_increment COMMENT主键&#xff08;部门编号&#xff09;,deptName VARCHAR(20) NOT NULL COMMENT部门名称,address V…...

nginx-ingress部署+跨命名空间转发

nginx-ingress部署一、环境信息二、k8s环境搭建三、ingress环境搭建3.1 deploy.yaml文件3.2 service-nodeport.yaml文件四、按照业务建立service及ingress4.1 业务信息4.2 建立service4.3 创建ingress五、验证结果一、环境信息 k8s集群版本&#xff1a;1.23.6ingress版本&…...

耗时1个月整理的网络安全学习路线,不信还有比这更详细的

首先咱们聊聊&#xff0c;学习网络安全方向通常会有哪些问题 1、打基础时间太长 学基础花费很长时间&#xff0c;光语言都有几门&#xff0c;有些人会倒在学习linux系统及命令的路上&#xff0c;更多的人会倒在学习语言上&#xff1b; 2、知识点掌握程度不清楚 对于网络安全…...

ChatGPT进阶-提示词中文版

一、ChatGPT简介 ChatGPT 是 OpenAI 开发的人工智能聊天机器人。该聊天机器人基于 GPT-3.5 语言模型&#xff0c;经过训练可以对用户给出的指令做出详细响应。与其他聊天机器人不同&#xff0c;ChatGPT 可以回答后续问题、求解数学方程式、撰写文本、修复和调试代码以及总结文本…...

Linux 进程:进程状态

目录一、进程状态1.简单分类2.详细分类&#xff08;1&#xff09;运行态&#xff08;2&#xff09;休眠态[1]可中断休眠态[2]不可中断休眠态&#xff08;3&#xff09;停止状态&#xff08;4&#xff09;死亡状态&#xff08;5&#xff09;僵死状态二、特殊进程1.僵尸进程2.孤儿…...

应用程序性能优化方案,web服务五级缓存优化,服务器性能优化...

winfrom 全局异常捕获WPF 全局异常捕获Asp.Net全局异常捕获MVC 全局异常捕获AspNetNetCore 全局异常捕获一级缓存html/css/js 前端缓存二级缓存Asp.Net MVC AspNetCore 客户端缓存设置三级缓存服务端缓存四级redis 数据库缓存服务端缓存五级sqlserver 数据库缓存设置分布式缓存…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...