linux三剑客sed之模式空间与保持空间

2023-11-09

pattern space(模式空间)and hold space (保持空间)

(H、h、G、g、x)
模式空间:sed处理文本内容行的一个临时缓冲区,模式空间中的内容会主动打印到标准输出,并自动清空模式空间

保持空间:sed处理文本内容行的另一个临时缓冲区,不同的是保持空间内容不会主动清空,也不会主动打印到标准输出,而是需要sed命令来进行处理

模式空间与保持空间的关系

模式空间:相当于流水线,文本行再模式空间中进行处理;
保持空间:相当于仓库,在模式空间对数据进行处理时,可以把数据临时存储到保持空间;作为模式空间的一个辅助临时缓冲区,但又是相互独立,可以进行交互,命令可以寻址模式空间但是不能寻址保持空间。可以使用高级命令h,H,g,G与模式空间进行交互。

d        Delete pattern space.  Start next cycle.
          删除pattern space的内容,开始下一个循环

h H    Copy/append pattern space to hold space.
          复制/追加pattern space的内容到hold space.(复制会覆盖原内容)

g G    Copy/append hold space to pattern space.
          复制/追加hold space的内容到pattern space. (复制会覆盖原内容)

x        Exchange the contents of the  hold  and  pattern  spaces.
          交换hold space和pattern space的内容.

下面使用一个实例来验证模式空间和保持空间的关系,以及理解高级命令h,H,g,G的作用

[root@localhost tmp]# cat >> num.txt <<EOF
> One
> Two
> Three
> EOF
[root@localhost tmp]# cat num.txt     
One
Two
Three
[root@localhost tmp]# 
[root@localhost tmp]# tac num.txt 
Three
Two
One
[root@localhost tmp]#

使用sed来将num.txt文本的内容按照倒叙输出
实现的命令如下:

[root@localhost tmp]# sed '1!G;h;$!d' num.txt 
Three
Two
One
[root@localhost tmp]# 

注释:1!G:第一行不执行G命令
$!d:最后一行不执行d命令,即不删除模式空间一行

原理图:

总结模式空间与保持空间关系
保持空间是模式空间一个临时存放数据的缓冲区,协助模式空间进行数据处理

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux三剑客sed之模式空间与保持空间 的相关文章

  • 段错误...关于你好世界

    这段代码非常简单 但我在 x86 64 Linux 系统上遇到了段错误 这让我很烦恼 刚开始接触asm 请耐心等待 与 NASM 组装nasm f elf64 test asm 与连接ld o test test o SECTION tex
  • 如何通过ssh获取远程命令的退出代码

    我正在通过 ssh 从远程计算机运行脚本 ssh some cmd my script 现在 我想在本地计算机上存储 shell 脚本的退出状态 我该怎么做 假设没有任何问题ssh其本身 其退出状态是在远程主机上执行的最后一个命令的退出状态
  • 应用程序中两个不同版本的库

    考虑一个场景 其中有两个不同版本的共享库 考虑 A 1 so 链接到 B so A 2 so 链接到 C so 现在 B so 和 C so 都链接到 d exe 当 B so 想要调用 A 1 so 中的函数时 它最终会调用 A 2 so
  • 如何在Linux上用C/C++编写Web服务器[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在考虑在 Linux 平台上开发一个小型 阅读 初级 Web 服务器 但我不知道从哪里开始 我希望它能够做的是 监听特定端口 接受
  • Linux 内核使用的设备树文件 (dtb) 可视化工具? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以图形化表示Linux内核中使用的硬件设备树的工具 我正在尝试了解特定 Arm 芯片组
  • 对于任何真实数据集,数据压缩比的最小可能值是多少

    我在写信ZLIB类似于嵌入式硬件压缩器的 API 它使用 deflate 算法来压缩给定的输入流 在进一步讨论之前 我想解释一下数据压缩率 数据压缩率定义为未压缩大小与压缩大小之间的比率 压缩比通常大于一 这意味着压缩数据通常比未压缩数据小
  • 在 Linux 中重新启动时,新创建的文件变为 0 kb(数据被覆盖为空)

    我遇到了一个奇怪的问题 这让我发疯 当前的任务是在 root 用户第一次登录时启动一组文件 并在同一用户第二次登录时启动另一组文件 我决定使用 profile 和 bashrc 文件 并在第一次登录期间发生的任务结束时重新加载 bashrc
  • bash 将输出重定向到文件,但结果不完整

    重定向命令输出的问题已经被问过很多次了 但是我有一个奇怪的行为 我使用的是 bash shell debian 版本 4 3 30 1 release 并尝试将输出重定向到文件 但并非所有内容都记录在文件中 我尝试运行的 bin 文件是 l
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • /sys/device/ 和 dmidecode 报告的不同 CPU 缓存大小

    我正在尝试获取系统中不同缓存级别的大小 我尝试了两种技术 a 使用 sys device 中的信息 这是输出 cat sys devices system cpu cpu0 cache index1 size 32K cat sys dev
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • 如何在线程创建和退出时调用函数?

    include
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • ALSA:snd_pcm_writei 调用时缓冲区不足

    当运行我最近从灰烬中带回来的旧程序时 我遇到了缓冲区不足的情况 该程序将原始声音文件完全加载到内存中 2100 字节长 525 帧 并准备 ALSA 进行输出 44 1khz 2 通道 有符号 16 位 if err snd pcm set
  • 在 C 中使用单个消息队列是否可以实现双向通信

    我希望服务器向客户端发送一些消息 并让客户端确认它 我被分配了这个任务 我可以在 C linux 中使用单个消息队列来完成它还是我需要创建两个 谢谢 是的 可以使用 sysV 消息队列来做到这一点 从您之前的问题来看 您正在使用该队列 您可

随机推荐

  • selenium-XPATH定位

    XPATH定位 相对路径 相对定位是两个杠表示 相对路径易维护 例 div 1 div 2 绝对路径 绝对定位用一个杠 绝对路径一个层级变化所有空间都有变化 例 html body div 1 section section main di
  • 简易RPC框架-SPI

    案例 我们所熟悉的jbdc是一种用于执行SQL语句的Java API 可以为多种关系数据库提供统一访问 提供了一种基准 据此可以构建更高级的工具和接口 如上图所示 任意的一个数据库厂商只要去实现jdbc的接口 就可以轻松的对接jbdc从而为
  • csharp: read excel using Aspose.Cells

  • grunt html引入,javascript – 使用grunt自动将本地* .js和* .css文件引用到index.html中

    我打算开发一个angularJS客户端 我将使用角度组件 这将导致多个 js css文件 为了避免手动引用每个新添加的js css文件 我打算使用grunt include source任务 问题是 在配置Gruntfile js后 gru
  • postgresql:自动生成uuid列

    postgresql 有一个uuid数据类型 选择这个类型就可以在每条记录新增时自动生成uuid值 但pgsql默认没有安装uuid自动生成功能 需要手动执行命令启用该功能 方法如下 1 执行sql语句 create extension u
  • 【开发工具】SVN断网续传、续下解决办法

    支持原创 欢迎关注原文地址 http www china10s com blog p 406 当你处在弱网环境下 经常断网 断线 这时候下载SVN代码是个难题 网上搜到的答案也是众说纷纭 那么我就说一下我的解决办法吧 在你确认断网导致SVN
  • 华为OD机试真题- 分割数组的最大差值-2023年OD统一考试(B卷)

    题目描述 给定一个由若干整数组成的数组nums 可以在数组内的任意位置进行分割 将该数组分割成两个非空子数组 即左数组和右数组 分别对子数组求和得到两个值 计算这两个值的差值 请输出所有分割方案中 差值最大的值 输入描述 第一行输入数组中元
  • PAD2Reg和Reg2PAD的时序分析

    PAD2Reg 1 Input delay约束从SOC PAD输入到第一级FF的data path 2 Input delay约束中的 clock指的是launch clock 它一般存在于Device中 对SOC来说是个虚拟时钟 如果发射
  • 从生产到测试,多张表但有相同的业务主键-存储过程的使用

    PL SQL Developer Test script 3 0 32 Created on 2019 4 12 by ADMINISTRATOR declare Local variables here sqh0 varchar2 20
  • CMS V5.7 SP2漏洞复现(CVE-2018-20129)

    0x00 前置 1 CVE中对该漏洞的描述 在 DedeCMS V5 7 SP2 中发现了一个问题 uploads include dialog select images post php 允许远程攻击者通过双扩展名和修改的 php 子字
  • Nodejs学习之Path模块

    一 介绍 Node js path模块提供了一些用于处理文件路径的方法 引入Path模块 var path require path 二 函数介绍 2 1 path normalize 格式化路径 console log normaliza
  • 常见数据结构

    一 数据结构 1 线性 数组 按顺序存储在内存中 每一个节点都有下标 查询快 数组一般用来存储相同类型的数据 可通过数组名和下标进行数据的访问和更新 数组中元素的存储是按照先后顺序进行的 同时在内存中也是按照这个顺序进行连续存放 数组相邻元
  • rtabmap安装与使用

    参考 ubuntu18 04安装Rtabmap 具体详细步骤 教你手把手运行基于ZED的rtab map ZED入门 利用RTAB MAP做SLAM ubuntu16 04 ROS Kinetic rtabmap 源码 非ros版本 安装运
  • freeswitch四、局域网支持

    在局域网内进行的测试 需要进行ACL的配置 conf autoload configs acl conf xml 中 加入下面配置
  • 搭建属于自己的云测试平台

    最近老大给了一个资料让研究 需要搭建一个平台 把公司所有的测试机集中在一起管理 谁需要用的时候 直接在web页面使用 省去了到处找别人借手机等问题 下面先介绍以下这个平台 STF Smartphone Test Farm 是一个Web应用程
  • python爬虫案例(二):大学排名

    小菜鸟从一个个案例来练习爬虫 心路是曲折的 555 在爬虫案例 一 中 是用urllib进行的 本案例中应用的是requests库 它会比urllib更加方便 requests是python实现的最简单易用的HTTP库 建议爬虫使用requ
  • JavaScript学习(四)认识DOM

    文章目录 DOM简介 通过ID获取元素 innerHTML 属性 改变 HTML 样式 display属性 DOM简介 DOM Document Object Model 文档对象模型 定义了访问和处理html文档的标准方法 DOM 将HT
  • 《信号与系统》示例1.单位阶跃信号的matlab实现

    1 已知单位阶跃函数 请用matlab实现单位阶跃信号 step1 打开matlab2014a 版本可以自选 step2 输入相应代码 t 1 0 01 5 ft t gt 0 plot t ft grid on plot函数是绘制二维图形
  • Vue项目运行报错:Module build failed (from ./node_modules/babel-loader/lib/index.js)

    报错分析 今天在npm run serve运行Vue项目时 突然报出了一个依赖构建错误 Module build failed from node modules babel loader lib index js 报错原因是babel的版
  • linux三剑客sed之模式空间与保持空间

    pattern space 模式空间 and hold space 保持空间 H h G g x 模式空间 sed处理文本内容行的一个临时缓冲区 模式空间中的内容会主动打印到标准输出 并自动清空模式空间 保持空间 sed处理文本内容行的另一