windows ubuntu sed,awk,grep篇,6.sed 保持空间和模式空间命令

目录

41.用保持空间替换模式空间(命令 x)

42.把模式空间的内容复制到保持空间(命令 h)

43.把模式空间内容追加到保持空间(命令 H)

44.把保持空间内容复制到模式空间(命令 g)

45.把保持空间追加到模式空间(命令 G)


Sed 有两个内置的存储空间:
z 模式空间:如你所知,模式空间用于 sed 执行的正常流程中。该空间 sed 内置的一
个缓冲区,用来存放、修改从输入文件读取的内容。
z 保持空间:保持空间是另外一个缓冲区,用来存放临时数据。Sed 可以在保持空间
和模式空间交换数据,但是不能在保持空间上执行普通的 sed 命令。我们已经讨论
过,每次循环读取数据过程中,模式空间的内容都会被清空,然而保持空间的内容
则保持不变,不会在循环中被删除。
请先建立如下文件,以用于保持空间的示例:
$ vi empnametitle.txt
John
Doe
CEO
Jason Smith
IT Manager
Raj Reddy
Sysadmin
Anand Ram
Developer
Jane Miller
Sales Manager
可以看到,在这个文件中,每个雇员的名称和职位位于连续的两行内。

41.用保持空间替换模式空间(命令 x)

命令 x(Exchange) 交换模式空间和保持空间的内容。该命令本身没有多大用处,但如果和其
他命令配合使用,则非常强大了。
假定目前模式空间内容为 ”line 1” ,保持空间内容为 ”line 2” 。那么执行命令 x 后,模式空间的
内容变为 ”line 2”, 保持空间的内容变为 ”line 1”
下面的例子打印管理者的名称,它搜索关键字’Manager’并打印之前的那一行:
$ sed –n -e '{x;n}’ –e ‘/Manager/{x;p}' empnametitle.txt
Jason Smith
Jane Miller
上面命令也可写成 : sed -n 'x;n;/Manager/{x;p}' empnametitle.txt
提示: 如果你的 empnametitle.txt 文件,雇员名称和职位不是连续的,那么得不到上面的结
果。
上面例子中 :
z {x;n} – x 交换模式空间和保持空间的内容; n 读取下一行到模式空间。在示例文件
中,保持空间保存的是雇员名称,模式空间保存的是职位。
z /Manager/{x;} 如果当前模式空间的内容包含关键 ’Manager’ ,那么就交换保持空
间和模式空间的内容,然后打印模式空间的内容。这就意味着,如果雇员职位中包
Manager, 那么该雇员的名称将被打印出来。
你也可以把上述命令保存在 sed 脚本中,然后执行,如下所示:
$ vim x.sed
#!/bin/sed -nf
x;n
/Manager/{x;p}
$ chmod u+x x.sed
$ ./x.sed empnametitle.txt
Jason Smith
Jane Miller

42.把模式空间的内容复制到保持空间(命令 h)

命令 h(hold) 把模式空间的内容复制到保持空间,和命令 x 不同,命令 h 不会修改当前模式
空间的内容。执行命令 h 时,当前保持空间的内容会被模式空间的内容覆盖。
假定目前模式空间内容为 ”line 1” ,保持空间内容为 ”line 2” 。那么执行命令 h 后,模式空间
的内容仍然为 ”line 1”, 保持空间的内容则变为 ”line 1”
打印管理者的名称:
$ sed -n -e '/Manager/!h' -e '/Manager/{x;p}' empnametitle.txt
Jason Smith
Jane Miller
上面例子中:
z /Manager/!h 如果模式空间内容不包含关键字 ’Manager’( 模式后面的 ! 表示不匹配
该模式 ) ,那么复制模式空间内容到保持空间。 ( 这样一来,保持空间的内容可能会
是雇员名称或职位,而不是 ’Manager’.) 注意,和前面的例子不同,这个例子中没有
使用命令 n 来获取下一行,而是通过正常的流程来读取后续内容。
z /Manager/{x;p} 如果模式空间内容包含关键字 ’Manager’ ,那么交换保持空间和模
式空间的内容,并打印模式空间的内容。这和我们在命令 x 的示例中的用法是相同
的。
你也可以把上面命令保存到 sed 脚本中执行:
$ vi h.sed
#!/bin/sed -nf
/Manager/!h
/Manager/{x;p}
$ chmod u+x h.sed
$ ./h.sed empnametitle.txtJason Smith
Jane Miller

43.把模式空间内容追加到保持空间(命令 H)

大写 H 命令表示把模式空间的内容追加到保持空间,追加之前保持空间的内容不会被覆盖;
相反,它在当前保持空间内容后面加上换行符 \n ,然后把模式空间内容追加进来。
假定目前模式空间内容为 ”line 1” ,保持空间内容为 ”line 2” 。那么执行命令 H 后,模式空间
的内容没有改变,仍然为 ”line 1”, 保持空间的内容则变为 ”line2\nline 1”
打印管理者的名称和职位(在不同的行上):
$ sed -n -e '/Manager/!h' -e '/Manager/{H;x;p}' empnametitle.txt
Jason Smith
IT Manager
Jane Miller
Sales Manager
上面例子中 :
z /Manager/!h 如果模式空间内容不包含关键字 ’Manager’( 模式后面的 ! 表示不匹配
该模式 ) ,那么复制模式空间内容到保持空间。 ( 这样一来,保持空间的内容可能会
是雇员名称或职位,而不是 ’Manager’.) 。这和之前使用命令 h 的方法是一样的。
z /Manager/{H;x;p} 如果模式空间内容包含关键字 ’Manager’ ,那么命令 H 把模式空
间的内容 ( 也就是管理者的职位 ) 作为新行追加到保持空间,所以保持空间内容会变
雇员名称 \n 职位 ”( 职位包含关键字 Manager) 。然后命令 x 交换模式空间和保持
空间的内容,随后命令 p 打印模式空间的内容。
你也可以把上面命令保存到 sed 脚本中执行:
$ vi H-upper.sed
#!/bin/sed -nf
/Manager/!h
/Manager/{H;x;p}
$ chmod u+x H-upper.sed
$ ./H-upper.sed empnametitle.txt
Jason Smith
IT Manager
Jane Miller
Sales Manager如果想把雇员名称和职位显示在同一行,以分号分开,那么只需稍微修改一下即可,如下:
$ sed -n -e '/Manager/!h' -e '/Manager/{H;x;;s/\n/:/p}' empnametitle.txt
Jason Smith:IT Manager
Jane Miller:Sales Manager
这个例子除了在第二个 -e 后面的命令中加入了替换命令之外,和前面的例子一样。 H x
p 都完成和之前相同的操作;在交换模式空间和保持空间之后,命令 s 把换行符 \n 替换为分
号,然后打印出来。
你也可以把上面命令保存到 sed 脚本中执行:
$ vi H1-upper.sed
#!/bin/sed -nf
/Manager/!h
/Manager/{H;x;s/\n/:/;p}
$ chmod u+x H1-upper.sed
$ ./H1-upper.sed empnametitle.txt
Jason Smith:IT Manager
Jane Miller:Sales Manager

44.把保持空间内容复制到模式空间(命令 g)

命令 g(get) 把保持空间的内容复制到模式空间。
这样理解:命令 h 保持 (hold) 住保持空间 (hold space) ,命令 g 从保持空间获取 (get) 内容。
假定当前模式空间内容为 ”line 1”, 保持空间内容为 ”line 2”; 执行命令 g 之后,模式空间内容变
”line 2” ,保持空间内容仍然为 ”line 2”
打印管理者的名称:
$ sed -n -e '/Manager/!h' -e '/Manager/{g;p}' empnametitle.txt
Jason Smith
Jane Miller
上面例子中 :
z /Manager/!h 最近几个例子都在用它。如果模式空间内容不包含关键字 ’Manager’,
那么就把他复制到保持空间。
z /Manager/{g;p} 把保持空间的内容丢到模式空间中,然后打印出来
你也可以把上面命令保存到 sed 脚本中执行:
$ vi g.sed#!/bin/sed -nf
/Manager/!h
/Manager/{g;p}
$ chmod u+x g.sed
$ ./g.sed empnametitle.txt
Jason Smith
Jane Miller

45.把保持空间追加到模式空间(命令 G)

大写 G 命令把当前保持空间的内容作为新行追加到模式空间中。模式空间的内容不会被覆
盖,该命令在模式空间后面加上换行符 \n ,然后把保持空间内容追加进去。
G g 的用法类似于 H h ;小写命令替换原来的内容,大写命令追加原来的内容。
假定当前模式空间内容为 ”line 1” ,保持空间内容为 ”line 2”; 命令 G 执行后,模式空间内容变
”line 1\nline 2”, 同时保持空间内容不变,仍然为 ”line 2”
以分号分隔,打印管理者的名称和职位:
$ sed -n -e '/Manager/!h' -e '/Manager/{x;G;s/\n/:/;p}' empnametitle.txt
Jason Smith:IT Manager
Jane Miller:Sales Manager
上面例子中:
z /Manager/!h 和前面的例子一样,如果模式空间内容不包含关键字 ’Manager’, 那么
就把他复制到保持空间。
z /Manager/{x;G;s/\n/:/;p} 如果模式空间包含 ’Manager’, 那么 :
x 交换模式空间和保持空间的内容。
G 把保持空间的内容追加到模式空间。
s/\n/:/ -- 在模式空间中,把换行符替换为分号 :
p 打印模式空间内容
注意:如果舍去命令 x ,即使用 /Manager/{G;s/\n/:/;p}, 那么结果会由
雇员职位 : 雇员名称 变成 雇员名称 : 雇员职位
也可把上述命令写到 sed 脚本中然后执行:
$ vi G-upper.sed
#!/bin/sed -nf
/Manager/!h
/Manager/{x;G;s/\n/:/;p}
$ chmod u+x G-upper.sed$ ./G-upper.sed empnametitle.txt
Jason Smith:IT Manager
Jane Miller:Sales Manager

资料来源于《SedandAwk101Hacks》,大家有兴趣可以买一本,也可以关注我,我更新完它。

曾经,我花费大半月将它们跑完,现在啥都忘了,还是要常用。

只为学习交流,不为获利,侵权联系立删。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

红米A2/A2+/POCO C51手机秒解BL+快速获取root权限+解谷歌锁刷机救砖教程

红米A2/A2/POCO C51手机是目前小米公司针对于国外用户的1个独立的品牌,或者和国内的红米手机都非常相似,几款手机由于硬件非常接近,我们这里将其放在一起和大家介绍而从他们的代号中我们可以得知,目前A2/POCO的代号为water&#x…

图像置乱加密-Arnold加密算法

置乱加密是另一种较常用的加密方法,现也被许多文献选用,置乱加密可以是以像素为单位进行全局置乱,该方式打乱了图像像素值的位置,使其图像内容失去相关性,达到保护的目的。也可以是以块为单位进行置乱,该方…

MT3608B 航天民芯代理 1.2Mhz 24V输入 升压转换器

深圳市润泽芯电子有限公司为航天民芯一级代理商 技术支持欢迎试样~Tel:18028786817 简述 MT3608B是恒定频率的6针SOT23电流模式升压转换器,用于小型、低功耗应用。MT3608B开关频率为1.2MHz,允许使用微小、低电平成本电容器和电感器高度不…

机器学习:基于Sklearn、XGBoost框架,使用XGBClassifier、支持向量分类器和决策树分类器预测乳腺癌是良性还是恶性

前言 系列专栏:机器学习:高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学…

通过反汇编深入理解栈

若想更好地理解函数的多级调用、线程切换其本质,都需要对栈有更加深入的认识。 一、如何生成反汇编 在上图框中输入 fromelf --text -a -c --outputtest.dis xxx.axf // 把下图中的axf文件(包括路径)替换掉 "xxx.axf"然后编译即可…

弹性网络回归(概念+实例)

目录 前言 一、基本概念 1. 弹性网络回归的原理 2. 弹性网络回归的优点 3. 弹性网络回归的应用 4. 弹性网络回归的调参 二、实例 前言 弹性网络回归(Elastic Net Regression)是一种用于处理回归问题的机器学习算法,它结合了岭回归&…

Jmeter05:配置环境变量

1 Jmeter 环境 1.1 什么是环境变量?path什么用? 系统设置之一,通过设置PATH,可以让程序在DOS命令行直接启动 1.2 path怎么用 如果想让一个程序可以在DOS直接启动,需要将该程序目录配置进PATH 1.3 PATH和我们的关系…

基于光伏电站真实数据集的深度学习预测模型(Python代码,深度学习五个模型)

效果视频链接:基于深度学习光伏预测系统(五个模型)_哔哩哔哩_bilibili 界面设计 注册界面 登录界面 主界面 展示界面 1.数据集来源 The SOLETE dataset 这里分别保存了不同间隔采样时间表格 1min是以1min 间隔采集的数据集 数据集截图&…

测算sample gpt

测算代码 import pandas as pd import matplotlib.pyplot as pltlosspd.read_pickle("loss_8.pkl") plt.plot(loss) losspd.read_pickle("loss_16.pkl") plt.plot(loss) losspd.read_pickle("loss_4_8.pkl") plt.plot(loss) losspd.read_pickle(…

因泰立科技交付宁波北收费站激光车辆检测器,实现车辆的精准分离

因泰立科技交付宁波北收费站ETC收费系统所需激光车辆检测器,实现车辆的精准分离,助力高速公路更加畅通、便捷。 此次交付的是因泰立科技的爆款产品:ILS-E20-3 激光车辆检测器,可以单侧安装,避免破地等大量工程安装工作…

利用Triple U.Net结构对冷冻切片HE染色组织学图像进行核实例分割

利用Triple U.Net结构对冷冻切片H&E染色组织学图像进行核实例分割 摘要IntroductionRelated WorksDatasetProposed MethodologyDataset PreparationSegmentation BranchLoss FunctionWatershed Algorithm Nuclei Instance Segmentation of Cryosectioned H&E Stained H…

【人工智能基础】逻辑回归实验分析

实验环境:anaconda、jutpyter Notebook 实验使用的库:numpy、matplotlib 一、逻辑回归 逻辑回归是一个常用于二分类的分类模型。本质是:假设数据服从这个分布,然后使用极大似然估计做参数的估计。 二、实验准备 引入库、预设值…

C++-DAY5

有以下类&#xff0c;完成特殊成员函数 #include <iostream>using namespace std; class Person {string name;int *age; public://有参构造Person(string name,int age):name(name),age(new int(age)){}//析构函数~Person(){delete age;}//拷贝构造Person(const Person …

FreeRTOS-系统时钟节拍和时间管理

一、前言 任何操作系统都需要提供一个时钟节拍&#xff0c;以供系统处理诸如延时&#xff0c;超时等与时间相关的事件。时钟节拍是特定的周期性中断&#xff0c; 这个中断可以看做是系统心跳。 中断之间的时间间隔取决于不同的应用&#xff0c;一般是 1ms – 100ms。时钟的节拍…

GQA分组注意力机制

一、目录 定义demo 二、实现 定义 grouped query attention&#xff08;GQA&#xff09; 1 GQA 原理与优点&#xff1a;将query 进行分组&#xff0c;每组query 参数共享一份key,value, 从而使key, value 矩阵变小。 2. 优点&#xff1a; 降低内存读取模型权重的时间开销&am…

无缝迁移:从阿里云WAF到AWS的成功转变之路

在当今数字化浪潮中&#xff0c;网络安全已经成为企业发展的重要组成部分。阿里云WAF&#xff08;Web 应用防火墙&#xff09;作为一种重要的网络安全解决方案&#xff0c;帮助企业保护其 Web 应用免受各种网络攻击。 然而&#xff0c;随着企业业务的扩展和需求的变化&#xf…

可替代IBM DOORS的现代化需求管理解决方案Jama Connect,支持数据迁移及重构、实时可追溯性、简化合规流程

作为一家快速发展的全球性公司&#xff0c;dSPACE一直致力于寻找保持领先和优化开发流程的方法。为推进其全球现代化计划&#xff0c;dSPACE开始寻找可以取代传统需求管理平台&#xff08;IBM DOORS&#xff09;的需求管理解决方案。 通过本次案例&#xff0c;您将了解dSPACE为…

数据结构-简单队列

1.简介 队列为一个有序列表&#xff0c;可以用数组或链表来实现。 先进先出原则。先存入队列的数据先取出&#xff0c;后存进队列的数据后取出。 这里对比一下&#xff0c;栈是后来者居上 下面使用数组来模拟队列&#xff0c;用数组的结构来存储队列的数据&#xff1a; Que…

Stable Diffusion教程:额外功能/后期处理/高清化

"额外功能"对应的英文单词是Extras&#xff0c;算是直译。但是部分版本中的翻译是“后期处理”或者“高清化”&#xff0c;这都是意译&#xff0c;因为它的主要功能是放大图片、去噪、修脸等对图片的后期处理。注意这里边对图片的处理不是 Stable Diffusion 本身的能…

微软开源了 MS-DOS 4.00

DOS的历史源远流长&#xff0c;很多现在的年轻人不知道DOS了。其实早期的windows可以看做是基于DOS的窗口界面的模拟器&#xff0c;系统的本质其实是DOS。后来DOS的漏洞还是太多了&#xff0c;微软重新写了windows的底层内核。DOS只是一个辅助终端的形式予以保留了。 微软是在…
最新文章