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

2023-11-17

在进入正题之前我们先来了解一下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' 执行完毕。

再贴一次结果:

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

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

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

 码字不易,你们的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入理解sed模式空间——sed ‘n;p‘ 的相关文章

随机推荐

  • linux参数传入awk,linux awk命令--如何引入外部变量

    目标 用shell命令删除目录下文件 但是排除某些特殊文件 第一时间无脑从谷歌获取 rm ls txt grep v test txt 或者 rm ls txt egrep v test txt 或者 rm ls txt awk if 0
  • python实现新闻网站_如何利用 Python 爬虫实现给微信群发新闻早报?(详细)

    1 场景 经常有小伙伴在交流群问我 每天的早报新闻是怎么获取的 其实 早期使用的方案 是利用爬虫获取到一些新闻网站的标题 然后做了一些简单的数据清洗 最后利用 itchat 发送到指定的社群中 由于爬虫面对 网站改版的不稳定性及 itcha
  • 全额限定名

    全额限定名说白了就是路径名 全额限定名 java lang String class文件中就是 java lang String pathname2classname classname2pathname
  • java 异常 理解_java异常理解(1)

    JAVA异常处理机制 1引子 try catch finally恐怕是大家再熟悉不过的语句了 而且感觉用起来也是很简单 逻辑上似乎也是很容易理解 不过 我亲自体验的 教训 告诉我 这个东西可不是想象中的那么简单 听话 不信 那你看看下面的代
  • 光流估计(对视频处理+python实现+原理+实验报告)

    资源 光流估计 对视频处理 python实现 原理 实验报告 实现效果 相关原理 光流是空间运动物体在观测成像平面上的像素运动的 瞬时速度 根据各个像素点的速度矢量特征 可以对图像进行动态分析 例如目标跟踪 亮度恒定 同一点随苕时间的变化
  • 植被物候参数遥感研究进展(好文分享)

    在气候变化背景下 植被物候作为生态系统对环境变化响应的直接体现方式 日益受到学界关注 获取长期 连续 多尺度的植被物候数据是物候研究的基础 而利用卫星遥感手段获取的物候参数已经成为陆地生态系统变化研究的重要指标 遥感物候参数在农业生产管理
  • 530 Please login with USER and PASS.

    安装 npm install save hexo deployer ftpsync 配置 deploy type ftpsync host xx xx xx xx user bxu123123 pass xx11123 remote htd
  • C++ RSA加解密

    原文链接 https blog csdn net u011029517 article details 79392522 之前需要用到RSA加解密的时候花费了我不少的时间 网上有很多RSA加解密的文章 但大多数都是从文件读取公钥或者私钥的
  • 字节跳动五面都过了,结果被刷了,问了hr原因竟说是...

    摘要 说在前面 面试时最好不要虚报工资 本来字节跳动是很想去的 几轮面试也通过了 最后没offer 自己只想到几个原因 1 虚报工资 比实际高30 2 有更好的人选 这个可能性不大 我看还在招聘 我是面试Android开发的 3年经验 下面
  • linux clamav 免费查毒工具

    linux下需要杀毒工具吗 我一直认为是不要的 基于linux的病毒很少 linux 安全防护也做的很好 一般很难功破 我想那些 们更喜欢 写windows下的病毒 用的人多啊 传播也容易 下面的操作 都是以管理员的身份来进行的 一 安装c
  • Java各种系统架构图及其简介

    1 spring架构图 Spring是一个开源框架 是为了解决企业应用程序开发复杂性而创建的 框架的主要优势之一就是其分层架构 分层架构允许您选择使用哪一个组件 同时为J2EE应用程序开发提供集成的框架 Spring框架的功能可以用在任何J
  • 使用Xshell7控制多台服务同时安装ZK最新版集群服务

    一 环境准备 主机名称 主机IP 节点 集群内通讯端口 选举leader clinet端提供服务 端口 docker0 192 168 1 100 node 0 2888 3888 2181 docker1 192 168 1 101 no
  • 61.(前端)权限管理实现——从数据库中获取数据展示在前端,使用插槽和Tag标签美化数据展示

    1 概述 本次内容 主要是对用户权限列表进行展示 2 基本流程 在component文件夹下创建power文件夹 并在power文件夹下创建Menu vue 在Menu vue任意编写显示内容 用于测试 去router index js挂载
  • 解决Scrapy使用pipline保存到数据库后返回None

    这也不算报错哈 解决方法 在process item处理完成后返回item即可 return item 案例分析 比如下面的pipeline class MyPipeline object def init self host 127 0
  • Flask 实现文件上传和下载(简单但实用)

    目录结构和代码 root master w upload ll total 4 0K drwxr xr x 3 root root 21 Jul 2 17 32 static drwxr xr x 2 root root 25 Jul 5
  • Android在EditText中只能输入中文或者指定类型的内容

    之前做过一个需求 在EditText中只能输入中文或者英文字符不能输入特殊字符和数字等一些其他内容 查阅了一些资料 需要重写一下EditText中的相关方法就可以完成该功能 总结一下 方便之后使用 看一下效果图 可以看到在EditText中
  • Redis系列之二:Redis基础知识

    引言 正所谓万丈高楼平地起 学习一项技术都需要从其基础知识开始 上一篇介绍了Redis在Linux环境下的安装步骤 本文主要介绍了Redis的基础知识 包括数据结构以及常用命令等 废话不多说 我们直接开始吧 Redis基础数据结构 Redi
  • GPT-4 的创造力全方位持平或碾压人类

    文章目录 一 前言 二 主要内容 三 总结 CSDN 叶庭云 https yetingyun blog csdn net 一 前言 最近 一项有关 GPT 4 的创造力思维测试火了 来自蒙大拿大学和 UM Western 大学的研究团队发现
  • 工作——自动化测试中用到的SQL server查询语句的格式调整

    SELECT CONVERT VARCHAR 100 GETDATE 0 05 16 2006 10 57AM SELECT CONVERT VARCHAR 100 GETDATE 1 05 16 06 SELECT CONVERT VAR
  • 深入理解sed模式空间——sed ‘n;p‘

    在进入正题之前我们先来了解一下sed的模式空间 如下 什么是sed的模式空间 答 仅供参考 就是从文件读取一行文本然后存入的缓冲区 然后命令操作模式空间的内容 在初始状态下模式空间是没有内容的 在每次循环读取数据的过程中 模式空间都会被清空