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

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

相关文章:

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

目录 1. 将模式空间和保持空间的内容互换并打印 2. 将保持空间的内容交换回模式空间 3. 使用保持空间保存状态信息 4. 交换模式空间与保持空间隔行匹配 sed 有两个内置的缓存空间: 模式空间:该空间是 sed 内置的一个缓冲区,是 sed 执行的…...

按位异或^

在 Python 中,a ^ b 表示按位异或运算符。按位异或运算符对整数的每一位进行运算,如果对应位上的两个二进制数字不同,则结果为 1,否则为 0。 示例 a 5 # 二进制: 0101 b 3 # 二进制: 0011result a ^ b print(result) # 输…...

《企业实战分享 · 常用运维中间件》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 近期刚转战 CSDN,会严格把控文章质量,绝不滥竽充数,如需交流&#xff…...

PyCharm 2024.1简介

PyCharm 2024.1 是JetBrains公司发布的Python集成开发环境(IDE)的最新版本。作为一个深受开发者欢迎的工具,PyCharm以其强大的功能和高效的开发体验著称。以下是PyCharm 2024.1的主要特性和改进: 1. **性能提升**: …...

终身免费的Navicat数据库,不需要破解,官方支持

终身免费的Navicat数据库,不需要破解,官方支持 卸载了Navicat,很不爽上干货,Navicat免费版下载地址 卸载了Navicat,很不爽 公司不让用那些破解的数据库软件,之前一直使用Navicat。换了几款其他的数据库试了…...

Spring Boot中的模板引擎选择与配置

Spring Boot中的模板引擎选择与配置 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来聊聊Spring Boot中的模板引擎选择与配置。模板引擎是生成动态网页…...

4、音视频封装格式---FLV

FLV FLV是一种容器封装格式,是由Adobe公司发布和维护的,用于将视频编码流与音频编码流进行封装。对于任意一种封装格式,都有其头部区域与数据区域,在FLV中,称之为FLV Header与Body。 对于FLV Header,一个FL…...

vscode 前行复制到下一行

目录 Ctrl d 会把当前行复制到下一行 步骤1:打开键绑定设置 目录 Ctrl d 会把当前行复制到下一行 步骤1:打开键绑定设置 使用VS Code设置换行 Ctrl d 会把当前行复制到下一行 步骤1:打开键绑定设置 打开 VS Code。按 CtrlShiftP 打开命…...

什么是文档透明加密|好用的文档透明加密软件有哪些?

在当今日益数字化和信息化的时代,数据安全问题愈发受到企业和个人的关注。文档作为信息的重要载体,其安全性不言而喻。为了保障文档的机密性和完整性,文档透明加密技术应运而生。本文将对文档透明加密进行详细介绍,并探讨一些好用…...

XTDrone-固定翼无人机编队跟踪无人车-配置教程

配置使用ROS版本为Neotic 1 配置 1.1 加载固定翼无人机编队跟踪控制工程文件 cp -r ~/XTDrone/coordination/fixed_wing_formation_control ~/catkin_ws/src 1.2 加载一些用到的功能包 sudo apt-get install ros-noetic-serial #根据自己的ROS版本修改 sudo apt-get insta…...

实现高性能、可扩展的实时数据采集系统:go-zero的应用与实践

随着互联网技术的高速发展,数据采集也越来越受到重视,成为企业获取商业价值的重要手段。在实际应用中,我们往往面临着数据量大、并发高、系统响应速度要求高、压力测试等挑战。如何实现高性能、可扩展的实时数据采集系统?本文将介…...

AUTOSAR NvM模块(五)

NvMRbCallbackSignatureAR45 改变回调函数的参数类型。 TRUE&#xff1a;根据AR44及之后版本&#xff0c;回调函数使用NvM_<Multi;Init>BlockRequestType参数类型。详细的函数调用参数请参考回调参数。 FALSE&#xff1a;根据AR43及之前版本&#xff0c;回调函数使用S…...

输出feign调用详细日志

开发新增一个feign调用类&#xff0c;调用另一个微服务的接口&#xff0c;总是报调用失败&#xff0c;想输出下调用的详细日志看看怎么回事。 第一步&#xff1a;查看feign的输出级别。 这个在qlm_config包里&#xff1a; /*** feign 日志记录级别* NONE&#xff1a;无日志记录…...

mac编译r2frida问题解决

在编译 https://github.com/nowsecure/r2frida 时报错: {"category": "error","code": 7006,"file": {"path": "/Users/xxx/Documents/Library/r2frida/src/agent/lib/info/index.ts","line": 494,&qu…...

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

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

javaSE期末练习题

文章目录 前言一、程序控制1.顺序结构问题描述解题思路题解 2.选择结构2.1 题1问题描述解题思路题解 2.1 题2问题描述解题思路题解 3.循环结构3.1 阶乘的求取问题描述解题思路题解 3.2 水仙花数问题描述解题思路题解 二、数组三、类与对象1.类与对象1.1圆类问题描述解题思路题解…...

Linux文件数据写入

结构体 fd fd也就是文件描述符&#xff0c;用于标识已经打开的文件、管道、socket等。是进程和内核的桥梁&#xff0c;允许进程执行各种文件操作 struct fd {struct file *file;unsigned int flags; };file Linux内核中表示打开文件的结构体&#xff0c;包含了文件操作所需…...

vue2 中如何使用 vuedraggable 库实现拖拽功能

1.通过 npm 或 yarn 安装 vuedraggable 库 npm install vuedraggableyarn add vuedraggable 2. 引入组件内部使用&#xff0c;以下代码是一个Demo&#xff0c;可直接复制粘贴演示 注意&#xff1a;因项目使用了 vant&#xff0c;需要安装 vant 才能正常运行 <template&g…...

0基础学C++ | 第13天 | 基础知识 | 类 | 对象

目录 前言 封装 封装的意义 struct 和 class 的区别 成员属性设置为私有 前言 众所周知&#xff0c; C是一个面向对象的编程语言&#xff08;面向对象的C语言的特点就是&#xff1a;封装、继、 多态&#xff09;&#xff0c;它与面向过程的C语言不通&#xff0c;对面向…...

Java | Leetcode Java题解之第212题单词搜索II

题目&#xff1a; 题解&#xff1a; class Solution {int[][] dirs {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};public List<String> findWords(char[][] board, String[] words) {Trie trie new Trie();for (String word : words) {trie.insert(word);}Set<String> a…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...