首页 > 其他分享 >深入理解sed模式空间——sed 'n;p'

深入理解sed模式空间——sed 'n;p'

时间:2022-11-04 16:59:21浏览次数:48  
标签:10 seq 理解 命令 sed 深入 读入 缓冲区

在进入正题之前我们先来了解一下sed的模式空间,如下

什么是sed的模式空间?

答(仅供参考):就是从文件读取一行文本然后存入的缓冲区,然后命令操作模式空间的内容,在初始状态下模式空间是没有内容的,在每次循环读取数据的过程中,模式空间都会被清空并写入新的内容。

 

解释以下命令结果:

  1. seq 10 | sed 'n;p'
  2. seq 10 | Sed -n 'n;p'
  3. seq 10 | sed 'p;n'
  4. seq 10 | sed -n p;n'

要进一步理解sed的工作原理,弄清上面四个命令便足够了,大家不妨猜一下上面四条命令的输出结果......

不知道大家有没有猜对,不过结果如下:

我想应该不少人都会对上面的结果产生困惑,为了照顾到大部分人,我尽量啰嗦一点吧,如下

第一个命令:seq 10 | sed 'n;p'

解:命令“ seq 10 ”按顺序生成 1 到 10 的 10 行数据,通过管道命令“ | ”把结果传给 sed 命令来处理,

  命令“ sed 'n;p' ”就会依次按行读入管道|传过来的数据,

  第一轮 sed :

  seq 把生成的“ 1 ”传给 sed ,现在 sed 的处理缓冲区就有数据“ 1 ”,有了数据“ 1 ”之后 sed 便执行单引号里的“ n;p ”命令

  n和p用“ ; ”分隔,表示依次执行,所以先执行“ n ”命令,n命令的理解就很关键了(我一开始也搞不清楚),其实n命令就是读入下一行数据,在“ seq 10 | sed 'n;p' ”这里就是读入“ 2 ”,那原来的“ 1 ”怎么办呢(关键),sed会默认把不要的数据丢到stdout(标准输出,也就是屏幕)那里,所以就会在屏幕上打印出第一行数据“ 1 ”;得到了第一个输出然后命令还没结束!

  刚刚执行的是“ n;p ”命令的 n ,接下来就到 p 了,p 就是直接打印 sed 缓冲区的内容,现在缓冲区里面是“ 2 ”,所以直接打印“ 2 ”,现在我们的屏幕就有了2行数据了,分别是第一行:1,第二行:2

  第一轮 sed 'n;p' 执行完毕。

  第二轮 sed :

  与上面上第一轮的差不多,如下:

  seq 把生成的“ 3 ”传给 sed (是 3 不是 2, 不要乱了),(关键)sed 的缓冲区里面现在有“ 2 ”’,然后现在又读入了新的“ 3 ”,sed会默认把不要的数据(在这里就是 2 )丢到标准输出,所以这时屏幕打印第三行数据“ 2 ”,所以现在 sed 的处理缓冲区就有数据“ 3 ”,有了数据“ 3 ”之后 sed 便执行单引号里的“ n;p ”命令

  n和p用“ ; ”分隔,表示依次执行,所以先执行“ n ”命令,n命令的理解就很关键了(我一开始也搞不清楚),其实n命令就是读入下一行数据,在“ seq 10 | sed 'n;p' ”这里就是读入“ 4 ”,那原来的“ 3 ”怎么办呢(关键),sed会默认把不要的数据丢到stdout(标准输出,也就是屏幕)那里,所以就会在屏幕上打印出第四行数据“ 3 ”;得到了第四个输出然后命令还没结束!

  刚刚执行的是“ n;p ”命令的 n ,接下来就到 p 了,p 就是直接打印 sed 缓冲区的内容,现在缓冲区里面是“ 4 ”,所以直接打印“ 4 ”,现在我们的屏幕就有了5行数据了,分别是第一行:1,第二行:2,第三行:2,第四行:3,第五行:4

  第二轮 sed 'n;p' 执行完毕。

  剩下来的都和上面一样我就不啰嗦了(第一次写这么多,有点累了-_-||)

  以上就是对 seq 10 | sed 'n;p' 命令的详细分析

再贴一次结果:

 

 

 

第二个命令:seq 10 | sed -n 'n;p'

  第二个命令与第一个命令几乎一样,只是 sed 多了一个选项 -n ,(相信只要理解了第一个命令,现在这个就so easy了)

  首先理解 -n 的意思,就是只打印处理过的数据,在这里再通俗点说就是sed缓冲区里不要的数据就不要丢到标准输出了,你爱丢哪丢哪!

  下面过一遍流程:

  第一轮 sed :

  seq 把生成的“ 1 ”传给 sed ,现在 sed 的处理缓冲区就有数据“ 1 ”,有了数据“ 1 ”之后 sed 便执行单引号里的“ n;p ”命令

  n和p用“ ; ”分隔,表示依次执行,所以先执行“ n ”命令,n命令的理解就很关键了(我一开始也搞不清楚),其实n命令就是读入下一行数据,在“ seq 10 | sed -n 'n;p' ”这里就是读入“ 2 ”,那原来的“ 1 ”怎么办呢(关键),这时 sed 就不会把“ 1 ”丢到标准输出了,所以屏幕上不会输出“ 1 ”,

  刚刚执行的是“ n;p ”命令的 n ,接下来就到 p 了,p 就是直接打印 sed 缓冲区的内容,现在缓冲区里面是“ 2 ”,所以直接打印“ 2 ”,现在我们的屏幕就有1行数据了,第一行:2

  第一轮 sed 'n;p' 执行完毕。

  第二轮 sed :

  与上面上第一轮的差不多,如下:

  seq 把生成的“ 3 ”传给 sed ,(关键)sed 的缓冲区里面现在有“ 2 ”’,然后现在又读入了新的“ 3 ”,这时 sed 就不会把“ 2 ”丢到标准输出了,所以屏幕上不会输出“ 2 ”,所以现在 sed 的处理缓冲区就有数据“ 3 ”,有了数据“ 3 ”之后 sed 便执行单引号里的“ n;p ”命令

  n和p用“ ; ”分隔,表示依次执行,所以先执行“ n ”命令,n命令的理解就很关键了,其实n命令就是读入下一行数据,在“ seq 10 | sed 'n;p' ”这里就是读入“ 4 ”,那原来的“ 3 ”怎么办呢(关键),sed 也不会把“ 2 ”丢到标准输出了,所以屏幕上也不会输出“ 2 ,”然后命令还没结束!

  刚刚执行的是“ n;p ”命令的 n ,接下来就到 p 了,p 就是直接打印 sed 缓冲区的内容,现在缓冲区里面是“ 4 ”,所以直接打印“ 4 ”,现在我们的屏幕就有了5行数据了,分别是第一行:2,第二行:4

  第二轮 sed 'n;p' 执行完毕。

再贴一次结果:

 

相信看到这里的童鞋都应该有所收获了,如果没有那一定是我的问题,对不起!!!

剩下两个命令我觉得就没有必要再啰嗦了,相信大家可以自行推导,如果还有什么不懂的可以私信我,看到就回!

第一次码这么多字,希望能对大家有所帮助,在此特地感谢李老师的讲解,可以说全是他的深入讲解的功劳!!!

 码字不易,你们的是激励我继续分享的动力,如果有任何问题,欢迎评论区留言!

标签:10,seq,理解,命令,sed,深入,读入,缓冲区
From: https://www.cnblogs.com/wannacry/p/16850076.html

相关文章

  • Codeforces Round #778 (Div. 1 + Div. 2, based on Technocup 2022 Final Round) F M
    A-E都还是比较简单的。首先,容易想到的,异或上\(2^k\),相当于以\(2^{k+1}\)的长度分块,然后每一块对半切,然后交换左右部分。我的想法是由于这个交换的性质,也许我们可以尝......
  • [ASM]汇编语言栈的理解
    [ASM]汇编语言栈的理解引言众所周知,栈是一种数据类型在汇编语言中自然也包含(PS:好像ASM只能使用栈访问内存空间,即使能直接访问也极其麻烦)汇编语言的栈遵从"先进后......
  • 深入理解 Spring 事务原理
    Spring事务的基本原理Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤......
  • 深入理解JVM - 垃圾收集器
    垃圾回收主要是要解决3件事情:那些内存需要回收?如何回收?什么时候回收?术语解释并行/并发并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。并发(Concur......
  • 基于gamebased算法的动态频谱访问matlab仿真
    目录一、理论基础二、核心程序三、测试结果一、理论基础随着越来越多的新型无线应用,对频谱资源的需求越来越大。在这种情况下,这是举世公认的认知无线电的出现已经成为......
  • Vue双向绑定理解与模拟
    title:Vue双向绑定理解与模拟1.Vue的双向绑定理解先从单向绑定进行理解,单向绑定就是将Model(data)绑定到视图层View,当我们使用JS更新Model数据层时,视图层就是进行自动......
  • 深入理解LINUX内核 第三版 电子书 pdf
    作者:(美)博韦,西斯特出版社:中国电力出版社原作名:UnderstandingtheLinuxKernel译者:陈莉君;张琼声;张宏伟 链接:深入理解LINUX内核第三版  为了彻底理解......
  • cookie、session和token理解
    1.cookieCookie是浏览器在电脑本地保存数据的一种机制,浏览器通过cookie这种机制可以在浏览器上保存用户在浏览器上浏览过的商品,或者在浏览器通过cookie记录一个布尔类型......
  • 【深入浅出 Yarn 架构与实现】1-1 设计理念与基本架构
    一、Yarn产生的背景Hadoop2之前是由HDFS和MR组成的,HDFS负责存储,MR负责计算。一)MRv1的问题耦合度高:MR中的jobTracker同时负责资源管理和作业控制两个功能,......
  • 数据结构 玩转数据结构 6-4 深入理解递归终止条件
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13456 1重点关注1.1代码草图   1.2二分搜索树添加元素代码简化......