sed进阶之多行命令

news2024/11/24 11:52:15

shell脚本编程系列


前面使用sed编辑器的基础命令时,所有的命令都是针对单行数据执行操作的。在sed编辑器读取数据流时,它会根据换行符的位置将数据分成行。sed编辑器会根据定义好的脚本命令,一次处理一行数据,然后移到下一行重复这个流程。但是有可能查找的短语出现在两行当中,此时普通的sed编辑器命令是无能为力的。所以,sed编辑器提供了3个可用于处理多行文本的特殊命令。

  • N:加入数据流中的下一行,创建一个多行组进行处理
  • D: 删除多行组中的第一行
  • P: 打印多行组中的第一行

next命令

  • 单行next命令
    单行next(n)命令会告诉sed编辑器移动到数据流中的下一行,不用再返回到命令列表的最开始位置。通常sed编辑器在移动到数据流中的下一行之前,会在当前行中执行完所有定义好的命令,而单行next命令改变了整个流程。比如删除指定的空行,可以先找到目标行,然后使用单行next命令移动到文本的下一行,再执行删除操作、
    sed '/Header/{n;d}' data1.txt
    
    在这里插入图片描述
  • 多行next命令
    单行next命令会将数据流中的下一行移入sed编辑器的工作空间(称为模式空间)。而多行版本的next(N)命令则是将下一行添加到模式空间中已有文本之后。这样的结果是将数据流中的两行文本合并到同一个模式空间中。文本行之间仍然用换行符分隔,但sed编辑器现在会将两行文本当作一行来处理。
    sed '/First/{N;s/\n/ /}' data2.txt
    
    在这里插入图片描述
    N命令可用于在数据文件中查找可能会分散在两行中的文本
    sed 'N;s/System.Admin/DevOps Engineer/' data3.txt
    
    在这里插入图片描述
    上面虽然解决了匹配多行的问题,但是最后两行合并到了一起,可能并不是我们想要的结果,此时可以考虑在sed编辑器中用两个替换命令,一个用来处理短语出现在多行中的情况,一个用来处理短语出现在单行的情况
    sed 'N;s/System\nAdmin/DevOps\nEngineer/;s/System Admin/DevOps Engineer/' data3.txt
    
    在这里插入图片描述
    上面的脚本存在一个不易察觉的问题,因为脚本在执行sed编辑器命令时总会先将下一行文本读入模式空间,但当抵达最后一行文本时,就会没有下一行可读,这时N命令会叫停sed编辑器。如果要匹配的文本正好在最后一行,那么命令就无法找到要匹配的数据,此时需要将单行编辑命令放在N命令之前即可
    sed 's/System Admin/DevOps Engineer/;N;s/System\nAdmin/DevOps\nEngineer/' data4.txt
    
    在这里插入图片描述

多行删除命令

对于单行删除(d)命令,sed编辑器用该命令来删除模式空间中的当前行,然而,与N命令一起使用时,则必须小心单行删除命令

sed 'N;/System\nAdmin/d' data4.txt

在这里插入图片描述

sed编辑器提供了多行删除(D)命令,该命令只会删除模式空间中的第一行,即删除该行中的换行符及其之前的所有字符。

sed 'N;/System\nAdmin/D' data4.txt

在这里插入图片描述

结合N命令和D命令可以删除数据流中出现在第一行之前的空行

sed '/^$/{N;/Header/D}' data5.txt

在这里插入图片描述

多行打印命令

多行打印命令(P)只打印模式空间的第一行,即打印模式空间中换行符及其之前的所有字符。当用-n选项来抑制脚本输出时,它和显示文本的当行p命令大同小异。

 sed -n 'N;/System\nAdmin/P' data3.txt

在这里插入图片描述

P命令的强大之处体现在其和N命令和D命令配合使用的时候.D命令的独特之处在于其删除模式空间中的第一行之后,会强制sed编辑器返回到脚本的起始处,对当前模式空间中的内容重新执行此命令。在脚本中加入N命令,就能单步扫过整个模式空间,对多行进行匹配

[root@192 Chapter21-Scripts]# sed -n '
> N
> s/#\n@//
> P
> D
> ' corruptData.txt

在这里插入图片描述

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

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

相关文章

numpy稀疏矩阵拼接

今天我发现numpy中的array拼接时dense矩阵和sparse矩阵拼接使用的形式是不一样的,测试如下 普通矩阵拼接 import numpy as npaa np.random.randn(4,3) bb np.ones((4,3)) ccnp.c_[aa,bb] cc.shape结果如下 sparse矩阵拼接 from scipy.sparse import *row [1,1,…

DC-7通关详解

信息收集 漏洞发现 web提示我们说弱口令可能不会奏效 那么我们就先不考虑弱口令 searchsploit搜payload打打看,无果 看别人的wp知道了是通过web左下角的这个玩意去github搜 在这个仓库用户唯一的仓库中看config.php 发现账号密码 尝试后台和ssh登录 ssh登录成功 提权 当前…

一款免安装、多平台兼容的 拾色器(Color Picker)

文章目录 场景需求场景需求 Chrome Google DevTools 中的 拾色器 用法其他浏览器 场景需求 场景 我是一个前端开发人员,我写好的界面给老板过目。老板说有个地方颜色需要调整,然后发我一张图片指了指说就用这个位置这样的红色,我看挺合适。…

数字化时代 | 服务数字化创新和转型全景视图

本文我全面介绍一下数字化时代,服务将往何处去,将如何设计和推进数字化创新和转型。 Figure 1 服务创新和转型全景视图 如上图所示,在我CRM3.0理论体系中,服务创新和转型涉及到四个层面的内容: 服务定位和目标&#…

Python数据分析script必备知识(三)

Python数据分析script必备知识(三) 1.单个文件,双个文件,三个文件的读取方式 新建1.txt文件,2.txt文件,3.txt文件,效果如下 执行代码 """ 单文件,双文件,三文件的读取方式Python的读写 file.read() ———— 一次性读取整个文件内容,推荐使用re…

【信息安全案例】——系统软件安全(学习笔记)

📖 前言:操作系统是管理系统资源、控制程序执行、提供良好人机界面和各种服务的一种系统软件,是连接计算机硬件与上层软件和用户之间的桥梁。因此,操作系统是其他系统软件、应用软件运行的基础,操作系统的安全性对于保…

React框架课时二认识项目的结构目录一

1react项目的目录的内容信息 ├── README.md 使用方法的文档 ├── node_modules 所有的依赖安装的目录 ├── package-lock.json 锁定安装时的包的版本号,保证团队的依赖能保证一致。 ├── package.json ├── public 静态公共目录 └── src 开发用的源代码目录 2 图…

英伟达Jetson NX,AI配置。安装SDK Components

目录 0.前言 1.准备 2.安装 3.检验 4.总结 0.前言 五一了,劳动节劳个动。推荐一首歌《花房姑娘》。 1.准备 接上篇博客英伟达Jetson NX套件刷机 算是完整配置英伟达这个Jetson AI。说来也是强,把GPU的能力用在了算力上,CUDA可以的。 查看…

SqlServer数据库中文乱码问题解决方法

这个问题在网上找了很多资料都没找到真正解决问题的办法,最终去了官网,终于找到问题的答案了,整理出来做个记录。 问题描述: 项目中遇到一个问题,sqlserver中的数据是ok的,结果保存到mysql中是乱码&#…

PostgreSQL数据库

0 安装 我使用的操作系统为Ubuntu。 安装命令: sudo apt-get update sudo apt-get install postgresql postgresql-client 进入postgres: sudo -i -u postgres psql 退出命令: \q PostgreSQL启动服务等: sudo /etc/init.d/postgr…

KalLinux安装burpsuite(超详细)

注意事项 1.注意linux位数 安装jdk之前先输出uname -a,看看kali linux是32位的还是64位,例如此处我的kali是32位的,因此需下载的是32位的jdk 2.jdk版本 jdk版本最好是oracle的,若使用的是openjdk很可能会出现burpsuite闪退现象…

还在因为指针的释放问题而烦恼吗?快来看下C++11智能指针shared_ptr

智能指针是这样一种类,即其对象的特征类似于指针。例如,智能指针可以存储new分配的内存地址,也可以被解除引用。 因为智能指针是一个类对象,因此它可以修改和扩充简单指针的行为。例如,智能指针可以建立引用技术&#…

读研读博不emo

文章目录 起因积极走出封闭的孤独经历一——去心理健康中心看看书 原因剖析解决思路 好久没更b站, 起因 起因是这样的,在自己读研的研一下学期。也遭遇到了年以来的第一次心态发生有点压抑的情况吧。其实第一学期因为我遇到了很好的导师,然后…

二叉搜索树(Binary Search Tree)的深入剖析:代码+画图 详解插入、查找、删除操作

BSTree 0 引言1 二叉搜索树的概念2 创建一棵二叉搜索树(插入操作)2.1 画图分析插入操作2.2 代码思路2.3 利用中序遍历验证 3 二叉搜索树的查找操作4 二叉树搜索树的删除操作(重点)4.1 代码的一些细节分析 5 总结 0 引言 本篇文章…

【Elasticsearch】集群部署

文章目录 本地集群Windiows创建 elasticsearch-cluster 文件夹,在内部复制三个 elasticsearch 服务修改集群文件目录中每个节点的 config/elasticsearch.yml 配置文件启动集群测试集群-查看集群状态 本地开启集群Linux软件下载软件安装创建用户修改配置文件启动软件…

链表及链表的常见操作和用js封装一个链表

最近在学数据结构和算法,正好将学习的东西记录下来,我是跟着一个b站博主学习的,是使用js来进行讲解的,待会也会在文章后面附上视频链接地址,大家想学习的可以去看看 本文主要讲解单向链表,双向链表后续也会…

Java后端:html转pdf实战笔记

目录 1、htmltopdf有什么用? 2、什么是wkhtmltopdf 3、wkhtmltopdf 参数介绍 4、示例项目 5、预览效果 1、htmltopdf有什么用? htmltopdf 是一款基于wkhtmltopdf技术的html转pdf文档java类库,支持html转pdf和url转pdf。 2、什么是wkhtmltopdf…

Renesa 瑞萨 A4M2 移植文件系统FAT32

配置SDIO底层驱动(SD card) 跳到对应GPIO,进行复用 将Operation Mode配置 SD_MMC 4Bit,系统会自动配置 会到stacks 根据上面提示,解决错误。 解决第一个error mmc配置 mmc 以上SD卡底层配置完成 使用串口作为…

linux rs485功能增加

目录 串口驱动层级结构 485配置流程 dts相关 配置注册 初始化 485收发切换 delay_after_send 目前linux 内核中已经支持了485的实现,但由于底层驱动的支持情况,导致我们采用不同芯片时需要对底层驱动进行修改,以满足内核485的各个回调…

Linux-基本指令2

文章目录 touch(新建一个文件)whoami(查看当前用户名)概念:1.你是如何看待指令的?2.我们在执行指令之前,我们应该先做什么? 概念:/tree . (树状显示文件夹和文件)rmdir && rmrmdirrm ctrl c通配符…