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

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.lryc.cn/news/338237.html

相关文章:

  • Secure Copy Protocol or SCP - 安全拷贝协议
  • Java面试题:什么是Java的值传递和引用传递?列举其应用场景,并说明其特点
  • Java 基于微信小程序的智能停车场管理小程序
  • python基础——类型注解【变量,函数,Union】
  • 人工智能研究生前置知识—科学计算库numpy
  • element UI 设置type=“textarea“ 禁止输入框缩放
  • Rust腐蚀服务器常用参数设定详解
  • 无人机巡检技术革命性变革光伏电站运维管理
  • 【学习】软件信创测试中,如何做好兼容性适配
  • 阿里云ACK k8s集群迁移
  • 1.3 字符设备驱动
  • 计算机毕业设计springboot小区物业报修管理系统m8x57
  • 深度学习体系结构——CNN, RNN, GAN, Transformers, Encoder-Decoder Architectures算法原理与应用
  • js 数字的常用方法梳理
  • STM32H743VIT6使用STM32CubeMX通过I2S驱动WM8978(5)
  • Objective-C学习笔记(block,协议)4.10
  • AD7982BRMZRL7 二进制 500kSPS 模数转换芯片 ADI
  • 采集某新闻网资讯网站保存PDF
  • 03攻防世界-unserialize3
  • 蓝桥杯备考随手记: 常见的二维数组问题
  • Java | Leetcode Java题解之第28题找出字符串中第一个匹配项的下标
  • 【数据结构与算法】:二叉树经典OJ
  • uniapp——长按识别二维码
  • 云服务器环境web环境搭建之JDK、redis、mysql
  • 第1章 计算机网络体系结构
  • Docker之自定义镜像上传至阿里云
  • 《深入Linux内核架构》第2章 进程管理和调度 (2)
  • (四)PostgreSQL的psql命令
  • 前端使用minio传输文件
  • [大模型] BlueLM-7B-Chat WebDemo 部署