Linux命令之sed

news2024/12/25 9:05:49

sed,Stream Editor(字符流编辑器)的缩写,简称流编辑器,是操作、过滤、转换文本内容的工具。
常用功能包括结合正则表达式对文件实现快速的增删改查。

工作原理

sed有2个空间来缓存数据,paattern space(模式空间)和hold space(保留空间)。sed工作时:

  • 步骤1:将待处理文本读入一行,去掉尾部换行符,存入paattern space,按照sed命令对文本进行编辑
  • 步骤2:如果sed命令没有-n参数,则把pattern space打印出来(加上换行符,因为步骤1去掉了换行符),如果有-n参数,判断当前的读入行内容是否有处理过,有处理过的则打印,没有处理过的不打印
  • 步骤3:把pattern space内容给到hold space,然后pattern space清空
  • 步骤4:如果文本未到末尾,换下一行重复步骤1;如果文本已处理到末尾,则结束。

工作原理引用了这篇文章:
sed的工作原理(pattern space 和 hold space)

使用

语法

sed命令的语法:sed [选项] [sed内置命令字符] [输入文件]

选项:

参数选项描述
-n取消默认sed的输出,即不符合处理规则的行不会输出,常与命令p一起使用
-i将修改结果写入文件(因为sed是将文本内容读入内存处理的,处理后的内容还是在内存中,未写入文件)
-e如果对文本有多次(超过1次)编辑,每一个处理中加上这个选项,就用不到管道符了
-r支持正则扩展

sed内置命令字符用于对文本进行指定的操作:

sed内置命令字符描述
aappend,追加,在指定行后面添加内容
ddelete,删除匹配的行
iinsert,插入,在指定行前插入文本
pprint,打印,打印匹配行的内容,通常于-n一起使用
s/正则表达式/替换内容/g将正则匹配到的内容进行替换,结尾的g(global)代表全局匹配

sed也可以指定处理范围(即按照指定规则选取匹配的行):

范围描述
空地址即如果没有指定处理范围的话,默认全文处理
单地址即某个数值,表示只处理某一行
/pattern/被模式匹配到的每一行
num1,num2从第num1行(包含)开始处理,到num2行(包含)结束,如果想到文本末尾结束,则num2可以设置为$,比如3,$表示从第3行到文本末尾
num1, +num2从第num1行(包含)开始处理,向下处理num2行(即总共处理num2行的数据)
num1~num2从第num1行(包含)开始到文本末尾,隔num2行的行文本进行处理,比如1~2表示1、3、5、7…行,即num2表示间隔数

实践

在实践时,我们先了解下内置命令字符p和选项-n

指定内容打印

如果我们指定行的时候,打印时需要使用内置命令字符p,但是默认情况下sed会将不符合规则的内容也打印处理,如果不打印不符合规则的内容,则需要加上-n
在这里插入图片描述

打印指定行

sed可以指定处理范围(即按照指定规则选取匹配的行):

范围描述
空地址即如果没有指定处理范围的话,默认全文处理
单地址即某个数值,表示只处理某一行
/pattern/被模式匹配到的每一行
num1,num2从第num1行(包含)开始处理,到num2行(包含)结束,如果想到文本末尾结束,则num2可以设置为$,比如3,$表示从第3行到文本末尾
num1, +num2从第num1行(包含)开始处理,向下处理num2行(即处理num1到num1+num2行,总共处理num2+1行的数据)
num1~num2从第num1行(包含)开始到文本末尾,隔num2行的行文本进行处理,比如1~2表示1、3、5、7…行,即num2表示间隔数

在这里插入图片描述
文本末尾的使用:
在这里插入图片描述

删除行

我们可以使用sed的内置关键字d去删除匹配的行(只是内存中的行删除了,文本中的没有删除)
在这里插入图片描述

替换内容

我们可以通过sed "s/正则表达式/替换内容/g" xxx对匹配到正则表达式的内容进行替换(在内存中替换,不会保存到文本中)
在这里插入图片描述
"s/正则表达式/替换内容/g"中,/可以用其他英文符号来表示,比如"s@正则表达式@替换内容@g"等等
在这里插入图片描述

多次编辑-e

一般情况下,我们可能对文本有多次的处理,除了使用|外,我们可以使用sed的-e选项来进行多次处理,一次-e对应一个处理逻辑。
在这里插入图片描述

追加a和插入i

  • 如果想在某一行前面(前一行)加内容,可以使用内置命令i,insert,表示插入
  • 如果想在某一行后面(下一行)加内容,可以使用内置命令a,append,表示追加

内置命令ai都是针对内存中的数据,并不会保存到文件中
在这里插入图片描述

保存到文件-i

如果想要将sed操作的内容保存到文件中,则可以使用-i选项
在这里插入图片描述

练习

根据ifconfig命令和sed命令获取到本地ip地址

在这里插入图片描述

获取最近10分钟的日志内容

  1. 首先,我们得知道当前时间,然后计算出10分钟前的时间,比如现在是2023-3-3 16:41,那10分钟前的时间是2023-3-3 16:31

  2. 我们需要知道日志中的时间格式,我们可以使用tail命令查询最近的日志,根据日志确定了日志的时间格式是:Mar 3 16:31
    在这里插入图片描述

  3. 因为sed命令过滤时是根据已有数据进行过滤的,所以我们需要确认Mar 3 16:31的数据是否在日志中存在,若存在则使用sed命令,不存在则上下调整时间,直到时间存在后就使用sed命令
    在这里插入图片描述

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

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

相关文章

Qt交叉编译环境搭建

环境及版本:Deepin 20.3 Qt 5.12.9 arm编译工具 gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz 1.下载Qt源码:qt-everywhere-src-5.12.9.tar.xz,并解压 2.下载arm编译工具: gcc-linaro-7.5.0-2019.12-x86_64_arm…

央企集团是怎么设置信息化、数字化部门的?

在数字经济大潮中,数字化转型已不是企业的“选修课”,而是关乎企业生存和长远发展的“必修课”。在企业数字化转型中,国有企业特别是中央企业普遍将数字化转型战略作为“十四五”时期业务规划的重要内容之一,数字化能力也成为衡量…

代码随想录【Day31】| 455. 分发饼干、376. 摆动序列、53. 最大子数组和

455. 分发饼干 题目链接 题目描述: 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸&#xff…

用Docker搭建yolov5开发环境

拉取镜像 sudo docker pull pytorch/pytorch:latest 创建容器 sudo docker run -it -d --gpus "device0" pytorch/pytorch bash 查看所有容器 sudo docker ps -a 查看运行中的容器 sudo docker ps 进入容器 docker start -i 容器ID 将依赖包全都导入到requiremen…

如何将图数据库应用于电影智能推荐

导读 电影,是一种结合视觉与听觉的现代艺术。如今,电影已不单是人们娱乐消遣的生活方式,也逐渐成为国家文化软实力的重要标志之一。据有关数据统计,2021年中国影视行业市场规模达2349亿元,同比增长23.2%,预…

java--IO

IO1.文件流2.常用的文件操作(1)根据路径构建一个File对象(2)根据父目录文件子路径构建(3)根据父目录子路径构建(4)获取文件相关信息(5)目录的操作和文件的删除…

计算机图形学07:有效边表法的多边形扫描转换

作者:非妃是公主 专栏:《计算机图形学》 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、算法原理二、…

Git 企业级分支提交流程

Git 企业级分支提交流程 首先在本地分支hfdev上进行开发,开发后要经过测试。 如果测试通过了,那么久可以合并到本地分支develop,合并之后hfdev和development应该完全一样。 git add 文件 git commit -m ‘注释’ git checkout develop //切换…

svn使用

一、SVN概述 1.1为什么需要SVN版本控制软件 1.2解决之道 SCM:软件配置管理 所谓的软件配置管理实际就是对软件源代码进行控制与管理 CVS:元老级产品 VSS:入门级产品 ClearCase:IBM公司提供技术支持,中坚级产品 1.…

【无标题】开发板设置系统时间

开发板设置系统时间环境查看系统时间查看硬件时间设置系统时间设置RTC时间时钟包括硬件时钟和系统时钟,系统时钟就是linux系统显示的时间,用命令 date可以显示当前系统时间;硬件时钟就是硬件自身的时间了。它们两者没有关系的,但是…

如何利用Power Virtual Agents机器人远程打开电脑中的应用

今天我们来介绍如何利用Power Virtual Agents来远程控制电脑。我们的设计思路是在聊天机器人里输入触发短语后打开自己电脑中的题库软件。 首先,进入已经创建好的聊天机器人编辑界面。 新建一个主题后,在“新建主题”中添加“触发短语”。 添加节点后&a…

C++代码优化(3):条款13~17

"野性袒露着灵魂纯粹"条款13:以对象管理资源(1)什么是资源?C中最常使用的资源就是动态内存分配,在系统编程层面上,文件描述符(fd)、互斥锁(mutex)、套接字网络socket……不管是哪一种资源,重要的是,你不使用…

CEC2014:鱼鹰优化算法(Osprey optimization algorithm,OOA)求解CEC2014(提供MATLAB代码

一、鱼鹰优化算法简介 鱼鹰优化算法(Osprey optimization algorithm,OOA)由Mohammad Dehghani 和 Pavel Trojovsk于2023年提出,其模拟鱼鹰的捕食行为。 鱼鹰是鹰形目、鹗科、鹗属的仅有的一种中型猛禽。雌雄相似。体长51-64厘米…

Spark 任务调度机制

1.Spark任务提交流程 Spark YARN-Cluster模式下的任务提交流程,如下图所示: 图YARN-Cluster任务提交流程 下面的时序图清晰地说明了一个Spark应用程序从提交到运行的完整流程: 图Spark任务提交时序图 提交一个Spark应用程序,首…

mysql数据库之存储过程

一、存储过程简介。 存储过程是事先经过编译并存储在数据库中的一段sql语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是也有好处的。 存储过程思想上很简单&…

Mysql常见面试题总结

1、什么是存储引擎 存储引擎指定了表的类型,即如何存储和索引数据,是否支持事务,同时存储引擎也决定了表在计算机中的存储方式。 2、查看数据库支持哪些存储引擎使用什么命令? -- 查看数据库支持的存储引擎 show engines; 或者 …

百趣代谢组学分享,关于儿童Graves病相关的新环境物质的鉴定

代谢组学文章标题:Identification of Novel Environmental Substances Relevant to Pediatric Graves’ Disease 发表期刊:Frontiers in endocrinology 影响因子:6.055 作者单位:苏州大学附属儿童医院 百趣提供服务&#xf…

外贸建站多少钱才能达到预期效果?

外贸建站多少钱才能达到预期效果?这是每个外贸企业都会问的问题。作为一个做外贸建站多年的人,我有一些个人的操盘感想。 首先,我认为外贸建站的投资是非常必要的。 因为在现代社会,网站已经成为外贸企业开展业务的必要工具之一…

3种方法删除7-Zip压缩包的密码

7-Zip压缩软件是一款完全免费且开源的软件,不仅能压缩和解压7-Zip压缩包,还能给压缩包设置打开密码。 有些小伙伴可能会遇到这样的问题,7-Zip压缩包设置密码后,过了一段时间不需要密码保护了,或者一不小心忘记了密码&…

后端快速上手前端三剑客 HtmlCSSJavaScript

文章目录前言HTML1.基础标签2.多媒体标签:3.表格&列表&布局4.表单CSS1.简介2.导入方式3.选择器JavaScript1.简介2.引入方式3.基本语法4.对象(1) 基本对象(2) BOM对象(3) DOM对象5.事件前言 结构:HTML 表现:CSS 行为:Java…