sed命令多行处理

1. sed 如何工作的

sed 维护两个空间:

  • 模式空间
  • 保留空间

sed是以行为周期来处理文本的。

  1. sed从输入流中读取一行,去掉最后的换行符,把它放入模式空间。
  2. 随后执行命令,每个命令都有关联的地址和条件,只有匹配时才执行命令。
  3. 当脚本命令执行完后,模式空间的内容被打印到输出流中(-n选项不出现),在最后加上换行符。
  4. 回到1

一般情况下,模式空间的内容在进行下一次循环时会删除;而保留空间则不会。

2. 多行处理技巧

多行处理命令

  • D 从模式空间删除一行,重新开始循环
  • G 从保留空间拿一行加到模式空间最后
  • H 从模式空间拿一行加到保留空间最后
  • N 从输入文件中拿一行加到模式空间
  • P 输出模式空间的第一行内容

命令看不懂还是直接看脚本吧

  • 打印相邻两行

$ seq 6 | sed -n 'N;l;D'
1\n2$
2\n3$
3\n4$
4\n5$
5\n6$

多读取一行,再打印,最后删除第一行。

  • 处理段落
sed '/./{H;$!d} ; x ; s/REGEXP/REPLACEMENT/'

前面的表示,非空行的时候把模式空间的东西放到保留空间。

x表示把保留空间内容复制到模式空间;

空行的时候再执行查找替换命令。

  • n与N区别
printf '%s\n' aa bb cc dd | sed ':x ; n ; = ; bx'
printf '%s\n' aa bb cc dd | sed ':x ; N ; = ; bx'
printf '%s\n' aa bb cc dd | sed ':x ; n ; s/\n/***/ ; bx'
printf '%s\n' aa bb cc dd | sed ':x ; N ; s/\n/***/ ; bx'

n命令先打印模式空间内容,再清空它;再读取下一行内容。
N命令先将读入的下一行放入模式空间,累计读取的内容,最后打印。

3. 分支与循环

上面的其实已经用到了循环

  • b无条件跳转
  • t条件成立时跳转
  • T条件不成立时跳转
  • :标号

还是看脚本吧

  • 合并行
sed ':x ; /=$/ { N ; s/=\n//g ; bx }' jaques.txt

另一种写法

sed ':x ; $!N ; s/=\n// ; tx ; P ; D' jaques.txt
  • sed去换行符
sed ':a;N;$!ba;s/\n//g' file

$!最后一行的意思

4. ref

gnu_sed

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

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

相关文章

电脑端微信截图文字识别功能效率更高了

近期发现微信中的截图文字识别比QQ中的截图文字识别效率高更高,效果更好。 使用方法: 安装电脑端微信客户端:https://weixin.qq.com/(如果没有下载,可以安装一下) 默认截图组合快捷键是:ALTA (使用下来感觉不是很顺手…

AI在运维实践中的价值提升

在2024年的AI赛道上,利用大数据 、机器学习算法、人工智能来改善运维效率已成为软件运营商发展的新主张,通过AI在运维流程的洞察、决策和执行,从而提升效率、减少故障时间,优化用户体验。通过分析大量数据来识别趋势和模式&#x…

【MATLAB】GA_ELM神经网络时序预测算法

有意向获取代码,请转文末观看代码获取方式~ 1 基本定义 GA_ELM(Genetic Algorithm and Extreme Learning Machine)是一种结合了遗传算法和极限学习机的神经网络时序预测算法。它的核心思想是通过使用遗传算法来优化极限学习机的权重和偏差&…

Python网络爬虫中JSON格式数据存储详解

目录 一、引言 二、JSON格式数据简介 三、Python中处理JSON数据 四、网络爬虫中获取JSON数据 五、存储JSON数据到文件 六、从文件中读取JSON数据 七、注意事项和常见问题 八、总结 一、引言 在网络爬虫的应用中,JSON格式数据以其轻量级、易读易写的…

element UI 设置type=“textarea“ 禁止输入框缩放

背景 在 Element UI 中,当您使用 el-input 组件并设置 type"textarea" 时,默认情况下,用户可以通过拖动输入框的右下角来调整其大小。如果您想禁止这种缩放行为,需要使用 CSS 来覆盖默认的浏览器行为。 注意上图&#x…

用于显著提高检索速度和降低成本的二进制和标量嵌入量化

我们引入了嵌入量化的概念,并展示了它们对检索速度、内存使用、磁盘空间和成本的影响。我们将讨论理论上和实践中如何对嵌入进行量化,然后介绍一个 演示,展示了 4100 万维基百科文本的真实检索场景。 演示地址https://hf.co/spaces/sentence-…

说说你对栈、队列的理解?应用场景?

一、栈 栈(stack)又名堆栈,它是一种运算受限的线性表,限定仅在表尾进行插入和删除操作的线性表 表尾这一端被称为栈顶,相反地另一端被称为栈底,向栈顶插入元素被称为进栈、入栈、压栈,从栈顶删…

JS控制元素平滑滚动,页面自动滚动锚点实现

使用 scrollIntoView 实现元素内子元素的平滑滚动, 下面是模拟接口list返回,然后通过按钮切换下一个,页面就会滚动到响应的位置 具体 scrollIntoView 有一些其他参数来配置滚动的具体交换,网上去查即可 备注:下面的代码…

Element ui 动态展示表格列,动态格式化表格列的值

需求 后台配置前端展示的表格列,遇到比如 文件大小这样的值,如果后台存的是纯数字,需要进行格式化展示,并且能控制显示的小数位数,再比如,部分列值需要加单位等信息,此外还有状态类&#xff0…

19c ADG补丁升级及回退

一、环境说明 主 备 IP 192.168.37.201 192.168.37.202 系统版本 RedHat 7.9RedHat 7.9 数据库版本 19.3.0.0.019.3.0.0.0 SID pristd hostname primarystandby 二、OPatch配置 19c 19.22版本补丁,需要的Opatch的版本为12.2.0.1.40或者高于此版本才可以。 2.1…

数据结构--循环队列

1.队列的定义: 和栈相反,队列(queue)是一种先进先出(first in first out,缩写为FIFO)的线性表.它只允许在表的一端进行插入,而在另一端删除元素. 在队列中,允许插入的一端叫做队尾(rear),允许删除的一端则称为队头(front). 2.循环队列的设计图示: 3.循环队列的结构设计: ty…

很严重,大家开始存钱吧

hello大家好,我是张大哥,今天给大家聊的话题是资产和负债!2024年,特别建议大家:一定要捂紧钱袋子,尽量减少不必要的消费支出,避免遭受经济波动的最直接影响。 什么是资产,就是能提供…

Vue.js npm错误:transpileDependencies.map不是一个函数

这个错误通常是由于npm版本不兼容导致的。在旧版本的npm中,transpileDependencies是一个字符串数组,我们可以直接配置需要编译的依赖库。而在较新版本的npm中,transpileDependencies被改成了一个对象,并且需要使用map()方法来处理…

刷好题,固基础-10

今天打天梯赛模拟赛有一道全排列的题(在我看来是啦,虽然只拿了25/30,一个点超时了呜呜呜呜呜) 在此纪念一下自己推导得出的得到两种不同全排列的方法: 方法一:按照字典序大小推导得出的全排列顺序 p是全…

【数据交换格式】网络socket编程温度采集智能存储与上报项目技术------JSON、TLV

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…

Git删除未跟踪的文件Untracked files

在 Git 中,要删除未跟踪的文件(Untracked files),你可以使用 git clean 命令。请注意,这个命令会从你的工作目录中永久删除这些文件,因此在执行之前请确保你不再需要这些文件或已经妥善备份。 以下是如何使…

DataSource

目录 1、 DataSource 1.1、 * 建立数据库连接的参数对象 1.1.1、 * 数据库url 1.1.2、 * 数据库用户名 1.1.3、 * 数据库密码 1.1.4、 * 数据库驱动名称 <

【C++成长记】C++入门 | 类和对象(上) |面向过程和面向对象初步认识、类的引入、类的定义、类的访问限定符及封装

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;C❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 一、面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步…

C++设计模式:代理模式(十三)

1、代理模式 定义&#xff1a;为其他对象提供一种代理以控制&#xff08;隔离使用接口&#xff09;对这个对象的访问等。 动机 在面向对象系统中&#xff0c;有些对象由于某种原因&#xff08;比如对象需要进程外的访问等&#xff0c;例如在分布式的系统中&#xff09;&#x…

【ZZULIOJ】1063: 最大公约与最小公倍(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 code 题目描述 输入两个正整数&#xff0c;输出其最大公约数和最小公倍数。 输入 输入两个正整数n和m&#xff08;n,m<1000000)。输入保证最终结果在int范围内。 输出 输出两个整数&#xff0c;用空格…