今天想起要用sed命令,但是做了很多次试验都是很意外的结果。所以特意看了下sed原理,这才恍然大悟。总结如下:
 
下面先做几个试验:对比着原理你就能明白了:
 
例子文件 example.txt
1
2
3
4
5
就是几个数字而已
比如你输入 sed  ‘’ example.txt
1
2
3
4
5

默认就可以将上面的东西打印出来。

如果你输入 sed -n ‘’ example.txt
那么就啥耶打印不出来
如果你输入: sed  ‘2p’ example.txt
那么就会出现一下的结果
1
2
2
3
4
5
重复出现了一个2.
现在再那个例子出来 sed  's/2//p' example.txt
————————————————————
1
 
3
4
5
————————————————————
如果你输入这个命令:sed ‘s/2//;p’ example.txt
————————————————————
1
1

3
3
4
4
5
5
————————————————————
要分析清楚,必须要先看下面的原理,看完了之后前几个命令不难理解。p命令是打印模式空间中的数据,如果没有匹配地址的话,那么就意味着全部匹配,这样每次读取一行就打印一行,我给出第一个命令的意思就是默认的时候里面应该是有个p命令(如果在‘’里面还[address-range][sed-command]语句的话,那么这个默认的p应该是放在这个语句的后面的,应该理解为:sed  ‘[address-range][sed-command];p example.txt’ ,注意红色的部分在现实的命令中是没有的,只是这么个默认的东西),sed  ‘’ example.txt  如果你在单引号里面再次的输入p,那么意味着内涵的p打印了一次匹配的模式空间的内容,再次加入的p又打印了一遍,得到的结果是每行打印两遍。从这个角度总结的话,那么最后两个命令就不难理解了:
sed  's/2//p' example.txt 是匹配了含有2的行并将其替换成为空并打印,因此只有匹配了的才打印,那么显示的匹配只打印一次就是一个空行,之后是默认的p打印,每行都是如此的处理,那么就会出现上面的结果。
sed ‘s/2//;p’ example.txt 和上面的相似,但是匹配的行并没有用p打印,之后是;p这个命令,那么他就是全部打印,之后是默认的p命令,这样的输出结果是只打印后两个p命令的输入,分号前面的替换操作是没有打印的。
 
而sed有个-n的操作,这个-n的意思就是关闭这个默认的p命令。
 
基本上就是这个意思,如果有分析不对的地方轻指教啊!!
 
 
 
先粘贴下原理:
Sed工作原理
 
sed是一个非交互式的流编辑器。所谓非交互式,是指使用sed只能在命令行下输入编辑命令来编辑文本,然后在屏幕上查看输出;而所谓流编辑器,是指sed每次只从文件(或输入)读入一行,然后对该行进行指定的处理,并将结果输出到屏幕(除非取消了屏幕输出又没有显式地使用打印命令),接着读入下一行。整个文件像流水一样被逐行处理然后逐行输出。
 
下面我们看一下sed的工作过程。
 
sed不是在原输入上直接进行处理的,而是先将读入的行放到缓冲区中,对缓冲区里的内容进行处理,处理完毕后也不会写回原文件(除非用shell的输出重定向来保存结果),而是直接输出到屏幕上。sed运行过程中维护着两个缓冲区,一个是活动的“模式空间(pattern space)”,另一个是起辅助作用的“暂存缓冲区(holding space)”。一般情况下,每当运行sed,sed首先把第一行装入模式空间,进行处理后输出到屏幕,然后将第二行装入模式空间替换掉模式空间里原来的内容,然后进行处理,以此类推。
 
一般情况下暂存缓冲区是用不到的,但有特殊的命令可以在模式空间与暂存缓冲区之间交换数据,后文将有介绍。由于sed对文本的所有操作都是在缓冲区里进行的,所以不会对原文件造成任何破坏。
 

4.2            Sed命令格式

 
sed的命令格式如下:
 
sed [-Options] [‘Commands’] filename
 
其中,Command是一个sed命令,sed命令一定要被包含在一对单引号中,以免被shell解释,其格式如下:
 
[address-range][sed-command]或
[Pattern-to-match][sed-command]
 
address-range是指要处理的行的范围,又叫地址范围;pattern-to-match是一个要匹配的模式,是一个正则表达式,sed-command是一个sed命令,用来对指定的行进行处理。下面是一个简单的例子:
 
sed –n ‘1,3p’ students
 
这个命令将文件students中的第1到3行打印到屏幕。注意,地址范围和sed命令之间没有空格,如果加入空格,sed也会将其忽略。参数-n用来取消默认输出。默认情况下,sed每读入一行到模式空间,无论是否对其进行处理,在读入下一行之前多要将模式空间中的内容输出到屏幕上。参数-n可以用来取消这种默认的输出,只有当用户用命令p时才将指定的行输出到屏幕。如果没有用参数-n而又对指定行执行了p命令,那么这些行将会被打印两次。
 
地址范围可以是一个数字,这个数字代表了一个行号;也可以是一个用逗号分隔的两个数字表示的范围(包括这两行)。范围可以是数字,正则表达式,或是两者的组合。
 
pattern-to-match是一个要匹配的模式,sed将会对所有匹配的行执行sed-command。其实,这里的pattern-to-match也可以看作是一个地址,这个地址是所有与指定模式匹配的行的行号。因此sed的格式可以归纳为一种:
 
sed [-Options] ‘[address-range][sed-command]’ filename
 

转载于:https://blog.51cto.com/sx521/774400

sed原理及p参数的运用的分析相关推荐

  1. sed原理的一些感悟

    sed原理: 过程:sed号称是行编辑器,读被操作文件,依次一行一行的读到模式空间,判断该行是否被地址定界所匹配,如果没有被匹配,默认输出到屏幕,如果被匹配了,做一些修改,替换,添加,新增,打印等等- ...

  2. multisim变压器反馈式_通过Multisim 7仿真软件对负反馈放大电路的原理、参数及性能进行分析...

    引 言 负反馈在电子线路中有着非常广泛的应用,采用负反馈是以降低放大倍数为代价的,目的是为了改善放大电路的工作性能,如稳定放大倍数.改变输入和输出电阻.减少非线性失真.扩展通频带等,所以在实用放大器中 ...

  3. 网络变压器的原理、主要参数及实现的功能

    本文将主要分析网络变压器的原理.主要参数及实现的功能 图1所示的网络变压器(Ethernet Transformer,也称数据汞/网络隔离变压器)模块是网卡电路中不可或缺的部分,它主要包含中间抽头电容 ...

  4. 天线巴伦制作和原理_一文看懂巴伦(功能原理、性能参数、基本类型)

    原标题:一文看懂巴伦(功能原理.性能参数.基本类型) 巴伦(英语为balun)为一种三端口器件,或者说是一种通过将匹配输入转换为差分输出而实现平衡传输线电路与不平衡传输线电路之间的连接的宽带射频传输线 ...

  5. 在线式测斜仪的工作原理和技术参数

    在线式测斜仪的工作原理和技术参数 一.产品概述 在线式测斜仪是⼀款新型的.智能的.适应多种⾏业应⽤的三轴智能测斜仪,主要⽤于在三维空间内进⾏多⽅位倾⻆测量和振动(频率.振幅)测量.将多个传感器串联安装 ...

  6. ❤️缓存集合(一级缓存、二级缓存、缓存原理以及自定义缓存—源码+图文分析,建议收藏) ❤️

    ❤️缓存集合(一级缓存.二级缓存.缓存原理以及自定义缓存-源码+图文分析,建议收藏) ❤️ 查询 : 连接数据库 ,耗资源!一次查询的结果,给他暂存在一个可以直接取到的地方!--> 内存 : 缓 ...

  7. 运放参数详细解释与分析

    目录: 一.运放参数详细解释与分析 1.输入偏置电流和输入失调电流 2.如何测量输入偏置电流Ib.失调电流Ios 3.输入失调电压Vos及温漂 4.运放噪声快速计算 5.电源抑制比DC-PSRR 6. ...

  8. 软件浪涌测试原理与功能,EMC测试总体概述及浪涌测试原理与浪涌防护元器件使用分析.ppt...

    EMC测试总体概述及浪涌测试原理与浪涌防护元器件使用分析 EMC测试概述 EMC测试包含EMI与EMS两部分 EMC测试概述 RE&RS测试简介 EMC测试概述 CE测试简介 EMC测试概述 ...

  9. 精华推荐 | 【JVM深层系列】「GC底层调优系列」一文带你彻底加强夯实底层原理之GC垃圾回收技术的分析指南(GC原理透析)

    前提介绍 很多小伙伴,都跟我反馈,说自己总是对JVM这一块的学习和认识不够扎实也不够成熟,因为JVM的一些特性以及运作机制总是混淆以及不确定,导致面试和工作实战中出现了很多的纰漏和短板,解决广大小伙伴 ...

最新文章

  1. 如何为云原生应用带来稳定高效的部署能力?
  2. Linux16.04配置CUDA8.0+CUDNNV5.1
  3. 在 .NET Core 中使用 DiagnosticSource 记录跟踪信息
  4. uva 11387——The 3-Regular Graph
  5. c++面向对象高级编程 学习十七 const, new, delete
  6. 华为路由器防火墙配置命令总结(上)
  7. 商业信息敏感、安全处理(口令、数字证书-U盾-密保卡、指纹识别-虹膜识别)...
  8. [转]RamDisk导致远程桌面客户端无法启动问题
  9. dbeaver驱动问题解决方案
  10. 【ASP.NET学习笔记一】ASP.NET页面传参总结
  11. linux下无线网卡的ioctl 接口
  12. matlab利用dft分析模拟信号频谱,利用DFT分析模拟信号频谱
  13. torch.view()详解及-1参数是什么意思
  14. 山东科技大学计算机控制系统期末考试试卷,山东科技大学 计算机操作系统试题b...
  15. 01 APP被苹果APPStore拒绝的各种原因
  16. rls lms 对比 matlab,自适应均衡器的LMS和RLS两种算法的特性与仿真分析
  17. [高数][高昆轮][高等数学上][第一章-函数与极限]04.无穷小与无穷大
  18. U3D游戏开发工程师正确入行姿势指南
  19. linux 浏览器崩溃,Firefox DoS漏洞导致浏览器崩溃 影响到Windows操作系统
  20. xch-sboot单体服务架子

热门文章

  1. 软件工程 c java的联系_软件工程—WC功能实现 (JAVA)
  2. 竖流式沉淀池集水槽设计计算_竖流沉淀池计算书
  3. js获取当前页面的地址和端口_url
  4. layer 关闭父页面 刷新
  5. DIY高清云台(吊舱)方案
  6. AI学会了视觉推理,“脑补”看不清的物体 | 李佳李飞飞等的CVPR论文
  7. mapxtreme is still in evalutation!
  8. eq相等 ne、neq不相等 EL表达式
  9. linux系统学习第六天
  10. 如何滚动更新 Service?- 每天5分钟玩转 Docker 容器技术(102)