在正常情况下,sed将待处理的行读入模式空间,脚本中的命令就一条接着一条的对该行进行处理,直到脚本执行完毕,然后该行被输出,模式空间请空;然后重复刚才的动作,文件中的新的一行被读入,直到文件处理完备。但是,各种各样的原因,比如用户希望在某个条件下脚本中的某个命令被执行,或者希望模式空间得到保留以便下一次的处理,都有可能使得sed在处理文件的时候不按照正常的流程来进行。这个时候,sed设置了一些高级命令来满足用户的要求。如果想要学习sed的高级命令,首先要了解如下两个缓存区:

1、模式空间(pattern space)的定义:模式空间就是一个缓存区,保存sed刚刚从输入端读取的。

2、暂存空间(hold space)的定义:暂存空间就是在处理模式空间数据的时候,临时缓存数据用的。

还有几个命令参数:

g: 将hold space中的内容拷贝到pattern space中,原来pattern space里的内容清除

G: 将hold space中的内容append到pattern space\n后

h: 将pattern space中的内容拷贝到hold space中,原来的hold space里的内容被清除

H: 将pattern space中的内容append到hold space\n后

x: 交换pattern space和hold space的内容

比如咱们想要倒排一个文件的内容,文件如下:

[qiu.li@l-tdata1.tkt.cn6 ~]$ cat tmp

1-line

2-line

3-line

执行如下命令:

[qiu.li@l-tdata1.tkt.cn6 ~]$ sed '2,$G;h;$!d' tmp

3-line

2-line

1-line

下面咱们逐步理解上面的执行过程

一、让咱们来分析一下如下三条命令:

2,$G:从第二行到最后一行执行G命令

h:执行h命令

$!d:删除除了最后一行的所有行

二、具体的操作

扫描到第一行

将1-line放入模式空间;此时模式空间还是1-line;

直接执行h命令,此时暂存空间是1-line;

执行d命令,删除了模式空间仅有的一行数据,删除之后,模式空间是空的

扫描到第二行

将2-line放入模式空间

执行G命令,将暂存空间的1-line添加到模式空间2-line的后面,此时模式空间是2-line\n1-line;

执行h命令,此时暂存空间的内容是2-line\n1-line;

执行d命令,模式空间被清空

扫描到第三行

将3-line放入模式空间,

执行G命令,将暂存空间的2-line\n1-line添加到模式空间3-line的后面,此时模式空间是3-line\n2-line\n1-line;

执行h命令,此时暂存空间的内容是3-line\n2-line\n1-line;

不执行$!d;

直接输出 3-line\n2-line\n1-line

当然,命令:sed '1!G;h;$!d' tmp 也能有这个效果。

linux sed 循环多行,linux sed 多行处理详细总结相关推荐

  1. linux下循环显示图片,Linux快速显示图片

    首先在Ubuntu里面制作图片, ######################################################################## 1920x1080为 ...

  2. linux怎么循环执行命令,linux命令:for循环

    for循环: 进行循环操作,for循环语句 1.命令格式: 第一种格式: for变量 in 列表; do 循环体 done Usage: for I in {1..100}; do let SUM+= ...

  3. 【Linux脚本-sed命令在文本首行和尾行插入空行】

    @[TOC]Linux脚本-sed命令在文本首行和尾行插入空行 Linux脚本-sed命令在文本首行和尾行插入空行 演示如下: 首先创建需要操作的文本文件 //create a file contai ...

  4. linux 给文件替换字符串/替换内容/替换某行 (shell,sed)

    本文是要讲linux 不打开文档/文件的情况下,替换文本内容. 打开文档,在文档/文件内替换内容的,可以用vim,可参考这篇文章vim 替换文本 . 话题相关 #linux 文件替换字符串 #sed ...

  5. 【linux】使用sed删除大文件中的指定行

    [linux]使用sed删除大文件中的指定行 引言: 最近在清洗数据时遇到一个超大的文件,需要删除其中不符合数据要求的指定行.使用之前写好的python脚本清洗速度太慢,于是检索了许多linux文件处 ...

  6. linux替换某一行中字符串,linux 给文件替换字符串/替换内容/替换某行 (shell,sed)...

    本文是要讲linux 不打开文档/文件的情况下,替换文本内容. 打开文档,在文档/文件内替换内容的,可以用vim,可参考这篇文章vim 替换文本 . 话题相关 #linux 文件替换字符串 #sed ...

  7. Linux shell中使用sed 替换\n换行符 (多行边一行、一行变多行)

    基本语法: sed "s/要匹配的字符串/要替换成的字符串/g" test.gson 语法解释:sed是按行处理文本数据的,每次处理一行数据后,都会在行尾自动添加trailing ...

  8. linux如何正则匹配删除一行,shell sed命令匹配替换删除最后第一行字符正则表

    只显示每行的第一个单词 [root@localhost ~]# sed -r 's/([^0-9a-Z]+)(.+)//gp' passwd root bin daemon adm 打印每行3次:se ...

  9. linux运维实战练习及linux shell脚本、awk、sed工具命令学习总结

    一.linux shell 脚本 1.描述shell程序的运行原理(可附带必要的图形说明): Linux系统的shell作为操纵系统的外壳,为用户提供使用操纵系统的接口.它是命令语言.命令解释程序及程 ...

  10. Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk

    0. grep命令 1. Linux ls  -ld 1 2. Linux 中ls -l // ll 命令详解  (7个字段):文件属性 1 3. shell中的if判断 4. Linux中 > ...

最新文章

  1. 在浏览器中进行深度学习:TensorFlow.js (四)用基本模型对MNIST数据进行识别
  2. 前、后端分离权限控制设计和实现思路
  3. 华为 Java 编程军规
  4. CCF201612-4 压缩编码(100分)
  5. yum -y --downloadonly --downloaddir=/ruiy upggrde;
  6. ubuntu 无法进入startx_Ubuntu无法进入图形化界面(报错/dev/sda1:clean的解决)
  7. Centos: 解决系统编码 locale 的报错 LC_CTYPE / LC_ALL 问题
  8. Java对象转换成JSON对象/JSON对象转换成JSON字符串/JSON字符串转换成JS对象
  9. linux mysql5.6.27源码安装和错误解决
  10. 披荆斩棘的北森,乘风破浪的HR SaaS
  11. 集成Tomcat环境到Eclipse中
  12. 没有对应的Id ,报空指针异常
  13. Unity 之 官网下载地址,方便各个版本的 Unity 安装包下载
  14. android小米手机变慢,小米安卓系统手机上网速度慢的解决方法
  15. 支付宝新农合缴费显示服务器,支付宝新农合缴费怎么交
  16. fbx sdk android,FBX SDK环境配置
  17. Word中将一级标题设置为段前一行与段后一行时,不显示段前一行怎么办?
  18. 三个故事,说穿了许多人
  19. BetaFlight模块设计之八:GPS任务分析
  20. python计算在险价值_VaR - 风险价值 - 蒙特卡罗法 - Python

热门文章

  1. 基于javaweb(springboot+mybatis)宠物医院预约管理系统设计和实现
  2. android广播注册源码,android 广播源码简要分析-注册
  3. MySQL查询语句转postGRE语句_PostgreSQL DBA常用SQL查询语句
  4. ucache灾备云报价_UCACHE灾备云功能
  5. file数组 删除文件_java编程IO基础之一:File类
  6. mysql数据库(1):连接与断开服务器
  7. 【课题报告】OpenCV 抠图项目实战(10)PyQt5 使用
  8. linux下sqlmap安装教程,(转)Sqlmap官网下载与安装教程[windows/linux版本]
  9. linux安装 中文乱码怎么解决方法,Linux安装GBK/GB2312程序显示乱码的五种解决方法...
  10. linux cat cd,linux 文件系统命令 cat cd chmod