原文地址

这篇文章主要是我参考命令的,直接复制粘贴,有问题请拍砖

A. sed执行模板=sed ‘模式{命令1;命令2}’ 即逐行读入模式空间,执行命令,最后输出打印出来

B. p打印当前模式空间所有内容,追加到默认输出之后;P打印当前模式空间开端至\n的内容,并追加到默认输出之前。

Sed并不对每行末尾\n进行处理,但是对N命令追加的行间\n进行处理,因为此时sed将两行看做一行。

C. n命令

n命令简单来说就是提前读取下一行,覆盖模型空间前一行,然后执行后续命令。然后再读取新行,对新读取的内容重头执行sed。

  1. 例子:从aaa文件中取出偶数行
  2. [root@localhost ~]# cat a.txt
  3. This is 1
  4. This is 2
  5. This is 3
  6. This is 4
  7. This is 5
  8. [root@localhost ~]# sed n n;p a.txt
  9. This is 2
  10. This is 4
  11. [root@localhost ~]#
注释:
  1. 读取This is 1,执行n命令,此时模式空间为This is 2
  2. 执行p 打印模式空间内容This is 2,之后读取This is 3
  3. 执行n命令,此时模式空间为This is 4
  4. 执行p,打印模式空间内容This is 4,之后读取This is 5
  5. 执行n命令,因为没有了,所以退出,并放弃p命令。
  6. 因此,最终打印出来的就是偶数行。

N命令简单来说就是追加下一行到模式空间,同时将两行看做一行,但是两行之间依然含有\n换行符,然后执行后续命令。然后再读取新行,对新读取的内容重头执行sed。此时,新读取的行会覆盖之前的行(之前的两行已经合并为一行)。

  1. 例子:从aaa文件中读取奇数行
  2. [root@localhost ~]# sed n N;P a.txt -----因为读取第5行时,执行N,发现没有第6行,不满足,就退出,放弃P命令
  3. This is 1
  4. This is 3
  5. [root@localhost ~]# sed n $!N;P a.txt
  6. This is 1
  7. This is 3
  8. This is 5
  9. [root@localhost ~]#
注释中1代表This is 1;2代表This is 2 以此类推
注释:
  1. 读取1$!条件满足(不是尾行),执行N命令,得出1\n2,执行P,打印得1
  2. 读取3$!条件满足(不是尾行),执行N命令,得出3\n4,执行P,打印得3
  3. 读取5$!条件不满足,跳过N,执行P,打印得5

D. d命令

d命令是删除当前模式空间内容(不再传至标准输出), 并放弃之后的命令,并对新读取的内容,重头执行sed。

  1. [root@localhost ~]# sed n;d a.txt
  2. This is 1
  3. This is 3
  4. This is 5
  5. [root@localhost ~]#
注释:
  1. 读取1,执行n,得出2,执行d,删除2,得空,
  2. 以此类推,读取3,执行n,得出4,执行d,删除4,得空,
  3. 但是读取5时,因为n无法执行,所以d不执行。因无-n参数,故输出1\n3\n5

D命令是删除当前模式空间开端至\n的内容(不在传至标准输出), 放弃之后的命令,但是对剩余模式空间重新执行sed。

  1. Sed N;D aaa
  2. This is 5
注释:
  1. 读取1,执行N,得出1\n2,执行D,得出2,执行N,得出2\n3,执行D,得出3
  2. 依此类推,得出5,执行N,条件失败退出,因无-n参数,故输出5

E. y命令:对之前匹配的字符逐个替换

  1. [root@localhost ~]# awk ‘{print $0h”}’ a.txt | sed y/his/HIS/’
  2. THIS IS 1H
  3. THIS IS 2H
  4. THIS IS 3H
  5. THIS IS 4H
  6. THIS IS 5H
  7. [root@localhost ~]#
  8. 此外,如果需要对某个字符串进行大小写转换,则可使用如下方法
  9. sed s/\b[a-z]\b/\u&/g ddd
  10. This is A and A is 1
  11. This is B and B is 2
  12. This is C and C is 3
  13. This is D and D is 4
  14. This is E and E is 5

F. h命令,H命令,g命令,G命令

  1. h命令是将当前模式空间中内容覆盖至缓存区,
  2. H命令是将当前模式空间中的内容追加至缓存区
  3. g命令是将当前缓存区中内容覆盖至模式空间,
  4. G命令是将当前缓存区中的内容追加至模式空间
  5. [root@wmsvmpc ~]# sed e ‘/101/h e $G cs1.txt
  6. PBCSPOFT0101 6
  7. PBCSPOFT0102 0
  8. PBCSPOFT0103 8
  9. PB\CSPOFT0104 0
  10. PBCSPOFT0101 6
  11. [root@wmsvmpc ~]#
  12. sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,
  13. 除非行被删除或者输出被取消,否则所有被处理的行都将打印在屏幕上。
  14. 接着模式空间被清空,并存入新的一行等待处理。
  15. 在上面的例子里,匹配test的行被找到后,将存入模式空间,
  16. h命令将其复制并存入一个称为保持缓存区的特殊缓冲区内。
  17. 第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,
  18. 然后把它放回模式空间中,然后被打印(也就末尾)。
  19. [root@wmsvmpc ~]# sed e ‘/101/h e ‘/102/G cs1.txt #追加到包含102的行的下一行
  20. PBCSPOFT0101 6
  21. PBCSPOFT0102 0
  22. PBCSPOFT0101 6
  23. PBCSPOFT0103 8
  24. PB\CSPOFT0104 0
  25. ddd文件中数字和字母互换,并将字母大写
  26. cat ddd.sed
  27. h
  28. {
  29. s/.*is \(.*\) and .*/\1/
  30. y/abcde/ABCDE/
  31. G
  32. s/\(.*\)\n\(.*is \).*\(and \).*\(is \)\(.*\)/\2\5 \3\5 \4\1/
  33. }
  34. sed f ddd.sed ddd
  35. This is 1 and 1 is A
  36. This is 2 and 2 is B
  37. This is 3 and 3 is C
  38. This is 4 and 4 is D
  39. This is 5 and 5 is E
注释:
  1. 读取1,执行h,复制到缓存区,执行s,模式空间得到匹配到的字母a
  2. 然后执行y,将a转成A,执行G,追加缓存区内容到模式空间,得A\nThis is a and a is 1
  3. 执行s,重新排列,得出This is 1 and 1 is A;以此类推,得出结果。
  4. 这里需要注意的是匹配的内容中,空格一定要处理好,
  5. 空格处理不对,会造成第二次s匹配错误,无法执行重新排列或排列错误

G. x命令

  1. x命令是将当前缓存区和模式空间内容互换
  2. [root@wmsvmpc ~]# sed e ‘/101/h e ‘/102/x cs1.txt #互换模式空间和保持缓冲区的内容。也就是把包含101与102的行互换。应该是替换,待百度
  3. PBCSPOFT0101 6
  4. PBCSPOFT0101 6
  5. PBCSPOFT0103 8
  6. PB\CSPOFT0104 0
  7. [root@wmsvmpc ~]# echo e a\nb\nc\nd\n”|sed nr H;${x;s/\n//g;p}’
  8. abcd
  9. ruse extended regular expressions in the script,使用功能更强大的正则表达式。
  10. ${} 表示处理到文件最后一行时执行{}中的命令,x把之前存入缓存区的数据按先入先出的顺序放入模式空间,然后做替换,最后打印

sed,n,N,d,D,p,P,h,H,g,G,x,解析的更多相关文章

  1. 【转】sed命令n,N,d,D,p,P,h,H,g,G,x解析

    1. sed执行模板=sed '模式{命令1;命令2}' 即逐行读入模式空间,执行命令,最后输出打印出来 2. 为方便下面,先说下p和P,p打印当前模式空间内容,追加到默认输出之后,P打印当前模式空间 ...

  2. sed命令n,N,d,D,p,P,h,H,g,G,x解析

    1.sed执行模板=sed '模式{命令1;命令2}'即逐行读入模式空间,执行命令,最后输出打印出来2.为方便下面,先说下p和P,p打印当前模式空间内容,追加到默认输出之后,P打印当前模式空间开端至\ ...

  3. Sed命令n,N,d,D,p,P,h,H,g,G,x解析3

    摘自:https://blog.csdn.net/WMSOK/article/details/78463199 Sed命令n,N,d,D,p,P,h,H,g,G,x解析 2017年11月06日 23: ...

  4. sed命令n,N,d,D,p,P,h,H,g,G,x解析2

    摘自: https://blog.csdn.net/xiexingshishu/article/details/50514132 sed命令n,N,d,D,p,P,h,H,g,G,x解析 2016年0 ...

  5. sed之h;H和:a;N;ba使用精解(对段落进行操作)

    1) 文本: Handle 0x0058, DMI type 20, 19 bytes Memory Device Mapped Address         Starting Address: 0 ...

  6. H.264码流结构解析

    from:http://wenku.baidu.com/link?url=hYQHJcAWUIS-8C7nSBbf-8lGagYGXKb5msVwQKWyXFAcPLU5gR4BKOVLrFOw4bX ...

  7. 如何理解render: h => h(App)

    学习vuejs的时候对这句代码不理解 new Vue({ el: '#app', router, store, i18n, render: h => h(App) }) 查找了有关资料,以下为结 ...

  8. vue-cli: render:h => h(App)是什么意思

    import Vue from 'vue' import App from './App.vue' Vue.config.productionTip = false new Vue({ render: ...

  9. SecureCRT中sqlplus,使用Backspace删除时 ^H^H

    平时习惯用Backspace删除输入错误,但是在SecureCRT中使用是,却是: SQL> sele^H^H 网上有几个方法,觉得改SecureCRT的配置最方便.

随机推荐

  1. 关于setTimeout的面试题

    于地铁上看了一篇帖子,关于setTimeout的面试题,觉得见得多,记录,以学习之. 我们都知道,这样的一个例子: for ( var i = 0;i<5; i++) { console.log ...

  2. my discipline life

    周一  ~   周五 7.30 ---  8.00 起床,洗漱等 8.00 ---  8.30 默写8-10个英语单词 8.35 ---  9.10 吃早餐,骑自行车去公司 12.20  ---  1 ...

  3. 全景图(panorama)低成本解决方案

    软硬件 米家全景相机,用于较低成本(学习成本+Money)的获得全景图像,而比较专业的获得全景图像的方法则是单反+云平台+PTGui的组合. PhotoShop,用于处理全景图像. PhotoShop ...

  4. 如何转换MySQL表的引擎

    有很多种方法可以将表的存储引擎转换成另一种引擎.每种方法都有其优缺点,在这里介绍四种方法: 选择优先级(pt-online-schema-change > 创建与查询 > 导出和导入 &g ...

  5. 使用elk转存储日志

    ELK指的是由Elastic公司提供的三个开源组件Elasticsearch.Logstash和Kibana. Logstash:开源的服务器端数据处理管道,能够同时 从多个来源采集数据.转换数据,然 ...

  6. GStreamer Windows tutorial demo 开发环境配置

    GStreamer 示例程序在 Windows 环境配置时坑比较多,好不容易配置成功了,写篇文档分享一下安装的关键步骤 官方文档见:https://gstreamer.freedesktop.org/ ...

  7. Linux 下非root用户使用docker

    Linux 下非root用户使用docker 通常我们使用linux系统的时候,最好是不要直接使用root账号,但是使用Docker的时候,默认又是不能使用非root用户的,关于原因,官方说法如下: ...

  8. CSS3中结构伪类选择器——root、not、empty、target选择器

    1.root选择器 将样式绑定到页面的根元素中.根元素是指位于文档树中最顶层结构的元素,在HTML页面中就是指包含整个页面的<html>部分. <style type="t ...

  9. HTML5无刷新修改Url,history pushState/replaceState

    一.认识window.history window.history表示window对象的历史记录,是由用户主动产生,并且接受javascript脚本控制的全局对象.window对象通过history对 ...

  10. Flume(一)Flume原理解析

    前言 最近有一点浮躁,遇到了很多不该发生在我身上的事情.没有,忘掉这些.好好的学习,才是正道! 一.Flume简介 flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应 ...