sed 保持空间命令之 x 的执行逻辑

目录

1. 将模式空间和保持空间的内容互换并打印

2. 将保持空间的内容交换回模式空间

3. 使用保持空间保存状态信息

4. 交换模式空间与保持空间隔行匹配


        sed 有两个内置的缓存空间:

  • 模式空间:该空间是 sed 内置的一个缓冲区,是 sed 执行的正常流程中,暂存当前处理行的空间。每处理完一行都会清空模式空间后再读取下一行。模式空间初始为空。
  • 保持空间:保持空间是另外一个缓冲区,用来存放临时数据,以便在后续处理中使用。与模式空间不同,保持空间的内容不会在循环中被删除。不能在保持空间上执行普通的 sed 命令。保持空间初始为一个换行符。

        sed 可以用 x(Exchange)命令交换模式空间和保持空间的内容。该命令通常和其它 sed 命令配合使用。以下用一些例子说明 x 命令的执行逻辑。

1. 将模式空间和保持空间的内容互换并打印

#echo -e "line1\nline2" | sed -n -e 'x;p'line1
#

        在这个例子中,x 命令交换了模式空间和保持空间的内容;p 命令打印模式空间的内容。完整的执行流程如下表所示。

循环次数

模式空间

保持空间

操作

1

line1

\n

\n

line1

line1

x =>

p \n =>

2

line2

line1

line1

line2

x =>

p line1

2. 将保持空间的内容交换回模式空间

#echo -e "line1\nline2" | sed -n -e 'x;x;p'
line1
line2
#

        在这个例子中,连续使用了两次 x 命令,第一次将内容交换到保持空间,第二次又将保持空间的内容交换回模式空间。结果是每一行都没有改变,仍然为原来的内容。完整的执行流程如下表所示。

循环次数

模式空间

保持空间

操作

1

line1

\n

line1

\n

line1

\n

\n

x =>

x =>

p line1 =>

2

line2

\n

line2

\n

line2

\n

x =>

x =>

p line2

3. 使用保持空间保存状态信息

#echo -e "line1\nline2\nline3" | sed -n -e '/line2/!x;//!d;x;p'
line1
line3
#

        在这个例子中,对于不包含 line2 的行,交换到保持空间,否则保持模式空间不变;然后删除模式空间中的非空行;之后再次交换模式空间与保持空间的内容;最后打印模式空间的内容。结果是包含 line2 的行被删除,其它行没有任何变化。完整的执行流程如下表所示。

循环次数

模式空间

保持空间

操作

1

line1

\n

line1

\n

line1

line1

x =>

d =>

x =>

p line1 =>

2

line2

d =>

x =>

p =>

3

line3

line3

line3

x =>

x =>

p line3

4. 交换模式空间与保持空间隔行匹配

        示例文本 empnametitle.txt 的内容如下:

John Doe
CEO
Jason Smith
IT Manager
Raj Reddy
Sysadmin
Anand Ram
Developer
Jane Miller
Sales Manager

        每个记录对应姓名和职位两行,比如 John Doe 的职位是 CEO。下面的命令打印职位是 Manager 的员工姓名。

#sed -n -e '{x;n}' -e '/Manager/{x;p}' empnametitle.txt
Jason Smith
Jane Miller
#

        '{x;n}' 是将模式空间交换到保持空间,然后读取模式空间的下一行。这时达到的效果是将当前行保存到保持空间,将下一行读到模式空间内。即实现了奇数行和偶数行的分离,职位读取到模式空间,姓名读取到保持空间。
 
        '/Manager/{x;p}' 的作用是如果模式空间里含有关键字 Manager,则将保持空间交换回模式空间,并打印出模式空间的内容,即员工姓名。

        完整的执行流程如下表所示。

循环次数

模式空间

保持空间

操作

1

John Doe

\n

CEO

\n

John Doe

John Doe

John Doe

x =>

n =>

2

Jason Smith

John Doe

IT Manager

Jason Smith

John Doe

Jason Smith

Jason Smith

IT Manager

IT Manager

x =>

n =>

x =>

p Jason Smith =>

3

Raj Reddy

IT Manager

Sysadmin

IT Manager

Raj Reddy

Raj Reddy

Raj Reddy

x =>

n =>

4

Anand Ram

Raj Reddy

Developer

Raj Reddy

Anand Ram

Anand Ram

Anand Ram

x =>

n =>

5

Jane Miller

Anand Ram

Sales Manager

Jane Miller

Anand Ram

Jane Miller

Jane Miller

Sales Manager

x =>

n =>

x =>

p Jane Miller

        注意:上例中的命令顺序是先 x 后 n,如果调换两个命令的顺序,将产生不同的结果。

#sed -n -e '{n;x}' -e '/Manager/{x;p}' empnametitle.txt
Sysadmin
Developer
Sales Manager
#

        完整的执行流程如下表所示。

循环次数

模式空间

保持空间

操作

1

John Doe

CEO

\n

\n

\n

CEO

CEO

n =>

x =>

2

Jason Smith

IT Manager

CEO

CEO

CEO

IT Manager

IT Manager

n =>

x =>

3

Raj Reddy

Sysadmin

IT Manager

Sysadmin

IT Manager

IT Manager

Sysadmin

IT Manager

IT Manager

n =>

x =>

x =>

p Sysadmin =>

4

Anand Ram

Developer

IT Manager

Developer

IT Manager

IT Manager

Developer

IT Manager

IT Manager

n =>

x =>

x =>

p Developer =>

5

Jane Miller

Sales Manager

IT Manager

Sales Manager

IT Manager

IT Manager

Sales Manager

IT Manager

n =>

x =>

x =>

p Sales Manager

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

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

相关文章

基于Hadoop平台的电信客服数据的处理与分析③项目开发:搭建基于Hadoop的全分布式集群---任务9:HBase的安装和部署

任务描述 任务内容为HBase的安装部署与测试。 任务指导 HBase集群需要整个集群所有节点安装的HBase版本保持一致,并且拥有相同的配置 具体配置步骤如下: 1. 解压缩HBase的压缩包 2. 配置HBase的环境变量 3. 修改HBase的配置文件,HBase…

怎样在《好作文》期刊上发表文章?

怎样在《好作文》期刊上发表文章? 《好作文》知网 G4 2版2500字符 小学语文阅读写作方向 24年8-9月不要摘要参考文献(小学语文阅读写作方向内容,不收纯教学文章,以学生角度为主,出刊晚2-3个月左右,一周内…

Python基础002

Python数据类型 1、字符串&#xff08;str&#xff09; str3 """I miss you so much""" print("str3 ", str3,type(str3)) str3 I miss you so much <class str>2、整数&#xff08;int&#xff09; str1 55 print(&quo…

[从0开始轨迹预测][NMS]:NMS的应用(目标检测、轨迹预测)

非极大值抑制&#xff08;Non-Maximum Suppression&#xff0c;简称NMS&#xff09;是一种在计算机视觉中广泛应用的算法&#xff0c;主要用于消除冗余和重叠的边界框。在目标检测任务中&#xff0c;尤其是在使用诸如R-CNN系列的算法时&#xff0c;会产生大量的候选区域&#x…

中介者模式在金融业务中的应用及其框架实现

引言 中介者模式&#xff08;Mediator Pattern&#xff09;是一种行为设计模式&#xff0c;它通过引入一个中介对象来封装对象之间的交互&#xff0c;从而使对象不需要显式地相互引用&#xff0c;从而降低了对象之间的耦合性。在金融业务中&#xff0c;中介者模式常用于实现复…

借教室(题解)

P1083 [NOIP2012 提高组] 借教室 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路&#xff1a;二分前缀和 我们将和质检员那题差不多&#xff0c;只需要将候选人二分即可 #include<bits/stdc.h> using namespace std; #define int long long int n,m; int r[100000…

vue 中使用element-ui实现锚点定位表单

效果图&#xff1a; 代码&#xff1a; html代码&#xff1a; <div class"content-left"><el-tabs :tab-position"left" tab-click"goAnchor"><el-tab-pane v-for"(item,index) in anchorNameList"v-anchor-scroll:ke…

【Vue】vue3 hooks 中使用 useRouter 报错 push undefined 报错解决方法

报错原因&#xff1a; 在 Vue 3 中&#xff0c;如果你在自定义 Hooks 中尝试使用 useRouter 并遇到错误&#xff0c;特别是没有 push 方法的问题&#xff0c;这通常是因为 useRouter 和 useRoute 需要在 Vue 组件的 setup 函数内部使用&#xff0c;而不是在自定义 Hooks 外部直…

【论文阅读】自动驾驶光流任务 DeFlow: Decoder of Scene Flow Network in Autonomous Driving

再一次轮到讲自己的paper&#xff01;耶&#xff0c;宣传一下自己的工作&#xff0c;顺便完成中文博客的解读 方便大家讨论。 Title Picture Reference and pictures paper: https://arxiv.org/abs/2401.16122 code: https://github.com/KTH-RPL/DeFlow b站视频: https://www.b…

设计⼀个⾼性能可⽀撑分桶多分⽚的库存中⼼,提供单库存分⽚不⾜扣减的合并库存功能,并提供商 品操作库存⼊库的渐进性⼊缓存的实现

设计一个高性能的库存中心&#xff0c;需要考虑多个方面&#xff0c;包括数据结构设计、存储优化、库存管理策略、缓存策略以及高并发处理能力。以下是设计这样一个系统的一些关键点&#xff1a; ### 1. 系统架构设计 - **微服务架构**&#xff1a;采用微服务架构&#xff0c;…

基于1bitDAC的MU-MIMO的非线性预编码算法matlab性能仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 基于1-bit DAC的非线性预编码背景 4.2 ZF&#xff08;Zero-Forcing&#xff09; 4.3 WF&#xff08;Water-Filling&#xff09; 4.3 MRT&#xff08;Maximum Ratio Transmission&…

uniapp做小程序内打开地图展示位置信息

使用场景&#xff1a;项目中需要通过位置信息打开地图查看当前位置信息在地图那个位置&#xff0c;每个酒店有自己的经纬度和详细地址&#xff0c;点击地图按钮打开内置地图如图 方法如下&#xff1a; <view class"dttu" click"openMap(info.locationY,info.…

快照读与当前读 是怎样的?

在数据库系统中&#xff0c;快照读&#xff08;Snapshot Read&#xff09;和当前读&#xff08;Current Read&#xff09;是两种不同的数据读取方式&#xff0c;它们与事务的隔离级别和一致性保证紧密相关。 快照读&#xff08;Snapshot Read&#xff09; 快照读是一种读取操…

Vue使用vue-cropper裁剪图片作头像

1.安装 工程目录下运行cmd npm install vue-cropper -S2.引用组件 全局引入&#xff0c;在main.js中添加 import VueCropper from vue-cropper Vue.use(VueCropper)3.使用裁剪框 这里httpUrl可以随意选择一张网络图片的连接作测试 <!-- 图片裁剪框 --><div style…

(18)GPS/指南针(一)

文章目录 前言 1 GPS/指南针 2 RTK GPS 3 GPS驱动程序选项 4 GPS自动切换 5 高级用途 前言 Copter/Plane/Rover 支持与 GPS、指南针和其他定位技术的整合&#xff1a; 1 GPS/指南针 Avionics Anonymous GNSS CompassAvionics Anonymous CompassBeitain BN-220 GPS / B…

源码解读:如何正确使用并区分@Resource和@Autowired注解?

环境&#xff1a;Spring5.3.23 源码解读&#xff1a;如何正确使用Resource和Autowired注解&#xff1f; 1.注解区别 Resource 和 Autowired 都可以用于&#xff0c;依赖注入。但它们之间存在一些明显的区别。 1.提供方&#xff1a; Autowired 是 Spring 提供的注解。Resour…

[Labview] 改写表格内容并储存覆盖Excel

在上一个功能的基础上&#xff0c;新增表格改写保存功能 [Labview] Excel读表 & 输出表单中选中的单元格内容https://blog.csdn.net/Katrina419/article/details/140120584 Excel修改前&#xff1a; 修改保存后&#xff0c;动态改写储存Excel&#xff0c;并重新写入新的表…

[21] Opencv_CUDA应用之使用Haar级联的对象检测

Opencv_CUDA应用之使用Haar级联的对象检测 Haar级联使用矩形特征来检测对象,它使用不同大小的矩形来计算不同的线和边缘特征。矩形包含一些黑色和白色区域,如下图所示,它们在图像的不同位置居中 类Haar特征检测算法的思想是计算矩形内白色像素和黑色像素之间的差异这个方法的…

【HDC.2024】云原生中间件,构筑软件安全可信的连接桥梁

近日&#xff0c;在华为云开发者大会2024期间&#xff0c;来自华为云PaaS服务&#xff0c;中间件领域产品团队的资深专家、技术总监、高级产品经理等大咖们发表了以“云原生中间件&#xff0c;构筑软件安全可信的连接桥梁”为主题的专题演讲。 演讲伊始&#xff0c;华为云产品…

Python编程使用openai的API访问oneapi暴露的ollama qwen2大模型

首先安装conda 安装Python 3.12 &#xff08;低版本的可能缺少openai库&#xff09; conda create -n py312 python3.12 conda activate py312 然后 pip install openai 提示&#xff1a; Installing collected packages: openai Successfully installed openai-1.35.…