sed是一种在线编辑器,它一次处理一行内容。
处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。
文件内容并没有改变,除非你使用重定向存储输出。

在处理方式上,sed与awk很类似,都是逐行读取。sed在批量处理文本时很有用,常用来做批量替换。

awk适合用来处理表格类的数据,而sed则适合用来处理不规则的数据

从语法上看,sed与awk都很相似:

  • sed [options] 'command' file(s)
  • sed [options] -f scriptfile file(s)

先看一些最简单的sed例子:

先创建一个测试文件sed.txt,内容如下:

  1. 1034 7:26
  2. 1034 7:27
  3. 1101 7:32
  4. 1006 7:45
  5. 1012 7:46
  6. 1028 7:49
  7. 1051 7:51
  8. 1029 7:57
  9. 1042 7:59
  10. 1008 8:01
  11. 1052 8:05
  12. 1005 8:12
  13. 1005 8:13

1.打印文件某一行

  1. sed -n '3p' sed.txt

输出:

  1. 1101 7:32

说明:上面的程序打印出了文档的第三行。-n选项会禁止默认的输出,如果不使用,将会打印出整个文件。sed默认会将每一行都输出到标准输出设备上,此项关闭了这个属性。p用于将模式空间中的内容输出到标准输出设备中。在这个例子中,3表示的是第三行,当第三行进入到模式空间后,就会输出到标准输出设备上。

上面的程序严格来说是有效率问题的,如果我们的sed.txt有一千万行,上面的程序在输出第三行后仍然会扫描余下的行,这样会很慢。改进一下:

  1. sed -n '3p;3q' sed.txt

或者:

  1. sed -n '3{p;q;}' sed.txt

要用awk来实现上面的功能,可以用下面的代码:

  1. awk 'NR==3' sed.txt

当然,为了提高效率,可以如下改进:

  1. awk 'NR==3{print;exit;}' sed.txt

2.打印文件的某几行

  1. sed -n '3,5p:5q' sed.txt

输出:

  1. 1101 7:32
  2. 1006 7:45
  3. 1012 7:46

说明:上面的程序打印出了文档的第3-5行。3,5表示的是打印的范围。

用awk来实现如下:

  1. awk 'NR>=3&&NR<=5' sed.txt

更高效一点:

  1. awk '{if(NR>=3&&NR<=5){print}else if(NR>5){exit}}' sed.txt

3.打印整个文件

  1. sed '' sed.txt

输出:

  1. 1034 7:26
  2. 1034 7:27
  3. 1101 7:32
  4. 1006 7:45
  5. 1012 7:46
  6. 1028 7:49
  7. 1051 7:51
  8. 1029 7:57
  9. 1042 7:59
  10. 1008 8:01
  11. 1052 8:05
  12. 1005 8:12
  13. 1005 8:13

说明:当command什么都不写,也没有指定-n时,sed会取出每一行输出。

awk的实现如下:

  1. awk '{print}' sed.txt
本文转自 ustb80 51CTO博客,原文链接:http://blog.51cto.com/ustb80/1057812,如需转载请自行联系原作者

sed学习笔记(1) - 入门知识相关推荐

  1. javaSE学习笔记01 入门篇

    javaSE学习笔记01 入门篇 java语言概述 Java背景知识 java是 美国 sun 公司 在1995年推出的一门计算机高级编程语言. java早期称为Oak(橡树),后期改名为Java. ...

  2. HTML5学习笔记 —— JavaScript基础知识

    HTML5学习笔记 -- JavaScript基础知识 标签: html5javascriptweb前端 2017-05-11 21:51 883人阅读 评论(0) 收藏 举报 分类: JavaScr ...

  3. mybatis学习笔记(3)-入门程序一

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(3)-入门程序一 标签: mybatis [TOC] 工程结构 在IDEA中新建了一个普通的java项 ...

  4. nginx学习笔记-01nginx入门,环境搭建,常见命令

    nginx学习笔记-01nginx入门,环境搭建,常见命令 文章目录 nginx学习笔记-01nginx入门,环境搭建,常见命令 1.nginx的基本概念 2.nginx的安装,常用命令和配置文件 3 ...

  5. php基础教学笔记,php学习笔记:基础知识

    php学习笔记:基础知识 2.每行结尾不允许有多余的空格 3.确保文件的命名和调用大小写一致,是由于类Unix系统上面,对大小写是敏感的 4.方法名只允许由字母组成,下划线是不允许的,首字母要小写,其 ...

  6. React学习笔记:入门案例

    React学习笔记:入门案例 React 起源于 Facebook 内部项目,因为市场上所有 JavaScript MVC 框架都不令人满意,公司就决定自己写一套,用来架设 Instagram 的网站 ...

  7. 数据挖掘学习笔记 5 线性回归知识及预测糖尿病实例

    #2018-03-21 16:45:01 March Wednesday the 12 week, the 080 day SZ SSMR http://blog.csdn.net/eastmount ...

  8. Linux操作系统学习笔记【入门必备】

    Linux操作系统学习笔记[入门必备] 文章目录 Linux操作系统学习笔记[入门必备] 1.Linux入门 2.Linux目录结构 3.远程登录 3.1 远程登录Linux-Xshell5 3.2 ...

  9. JavaScript学习笔记之入门篇

    JavaScript学习笔记之入门篇 JavaScript引入 1. 页面级 js: 2. 外部js文件: JavaScript变量 1. 变量的作用: 2. 声明变量: 3. 变量赋值: 4. 单一 ...

  10. 【学习笔记--FMCW基础知识】

    学习笔记--FMCW基础知识 前言 mmWave测距原理 mmWave区分多个物体 mmWave的距离分辨率(Range Solution) mmWave的最大测量距离 前言 由于工作原因需要了解TI ...

最新文章

  1. 2017年含金量最高的机器学习技能或知识有哪些? 翻译 2017年10月20日 14:22:44 标签: 机器学习 / quora 7504 原文:As of 2017, what set of
  2. Cheat_Sheet ---Keras、Matlab、Matplotlib、Numpy、Pandas、Scikit-Learn、SciPy
  3. Struts2 自定义拦截器(easy example)
  4. webpack那些事儿
  5. HIbernate抽象出通用方法
  6. 服务器支持http tcp,Nginx配置http和tcp(示例代码)
  7. iphone小圆点在哪儿设置_iPhone终于自带长截屏了?苹果手机这些截图方式,你用过几种?...
  8. 有的时候print函数不会立即打印的解决办法(flush=True)
  9. 游戏王抽卡模拟器(概率计算器)
  10. sscom 中文显示 乱码_SSM框架中的中文乱码问题
  11. canvas实现圆饼图,柱状图,折线图(满满的干货)
  12. Style之flag标签
  13. 电脑CPU型号是什么意思?
  14. 一级域名与二级域名之间的区别
  15. 【ME909】华为ME909 4G LTE模块在树莓派下通过minicom进行发送短信演示
  16. linux cp: 略过目录
  17. 服务器系统xb21cn,Office2010/2016精简三合一版(xb21cn-0901版)
  18. 快乐大掌柜源码--快乐大掌柜系统开发模式介绍
  19. python识别图片中数字_Python图像处理之图片验证码识别
  20. 【锐捷交换】接入交换机配置DHCP Snooping + IP Source guard + ARP-check

热门文章

  1. 成员方法的使用及其调用
  2. Eclipse 2017最佳20个插件
  3. 面向对象练习——校园管理系统
  4. 如何优雅的输出PHP调试信息
  5. android学习之ListView如何使用
  6. 判断一个变量是否在一个数组里
  7. Json for the .NET Compact Framework
  8. 小程序wafer2操作数据库
  9. SqlAlchemy ORM
  10. FPGA UART简单的串口接收模块