简介

sed是作为特殊目的的编辑器而创建的,用于专门执行脚本;与ed不同,它不能交互地使用。sed面向字符流。默认情况下,到sed的所有输入都会经过相应的处理,并转为标

准输出。输入文件本身不发生改变。如果确实想改变输入文件,一般使用shell机制进行输出重定向,当你对所做的编辑工作满意时,用修改后的版本代替最初的文件。

sed的字符流定位对如何应用寻址有重要影响。sed遍历文件,每次一行,这样每一行都成为当前行,而且每一行都应用相同的命令。

sed命令是隐式的全局命令

sed中s/regular/complex/   等价于  ed中  g/regular/s//complex/

理解ed中的当前行寻址与sed中全局行寻址之间的区别是很重要的。在ed中,使用寻址扩大受命令影响的行数;在sed中,使用寻址限制受命令影响的行数。

模式空间

sed维护一种模式空间,即一个工作区或临时缓冲区,当应用编辑命令时将在那里存储单个输入行。下图展示了进行模式空间转换的一个两行的脚本。它将“TheUnix System”改变为“The UNIX Operating System"。一次一行设计的一个优点是sed在读取非常庞大的文件时不会出现问题。屏幕编辑程序必须将整个文件(或者它的一些庞大的部分)读入内存,这将会产生内存溢出或者在处理虎大的文件时速度非常慢。

模式空间的内容是动态的,而且并不总是匹配最初的输入行。

模式空间的操作

  1. 生成输入行的备份。
  2. 修改模式空间中的备份。
  3. 将备份输出到标准输出。

使用sed

调用sed有两种方法:在命令行上指定编辑指令,或者将它们放到一个文件中并提供这个文件的名字。

测试文本:list

John Daggett,  King Road, Plymouth MA
Alice Ford, East Broadway, Richmond VA
Orville Thomas, Oak Bridge Road, Tulsa OK
Terry Kalkas, Lans Road, Beaver Falls PA
Eric Adams, Post Road, Sudbury MA
Hubert Sims, 328A Brook Road, Roanoke VA
Amy Wilde, Bayshore Pkwy, Mountain View CA
Sal Carpenter, 6th Street, Boston MA

命令行上指定命令

3种方式指定多行指令

用分号分割指令

每个命令前面加-e

sed -e 's/MA/Massachusetts/' -e 's/ PA/, Pennsylvania/' list

效果同beyond compare对比图

利用Bash分行指令功能

[root@localhost learn_sed]# sed '
> s/MA/Massachusetts/
> s/ PA/, Pennsylvania/' list

效果同beyond compare对比图

阻止未命中输入行显示

上面输出结果,那些未命中的行业显示了。-n可以组织sed输出,但是他把命中的行也阻止了。所以,对于想要输出的行必须包含p

sed -n 's/MA/Massachusetts/p;s/ PA/, Pennsylvania/p' list

提供脚本文件

sed脚本文件,sedsrc

s/MA/Massachusetts/
s/ PA/, Pennsylvania/

-f 指定命令行上的脚本文件名字

sed -f sedsrc list

输出结果对比见beyond compare对比图。

显示在屏幕上的结果是临时的,输入文件中没有发生改变。要先保存输出结果,必须重定向

sed -f sedscr list > newlist

千万注意,list和newlist不能是同一个文件。

最新文章

  1. D2js 的邦联式架构
  2. Qt 获取本机ip地址  【转自 CSDN jpchen609
  3. [转]python问题:IndentationError:expected an indented block错误解决
  4. [.net 面向对象编程基础] (17) 数组与集合
  5. SQL Server 2014 安装小记
  6. x+y = ((x&y)<<1) + (x^y) 证明
  7. C#动态加载程序集(转)
  8. ASP.NET MVC中默认Model Binder绑定Action参数为List、Dictionary等集合的实例
  9. (原)torch的apply函数
  10. VC++ 2013 开发windows窗体程序
  11. viewstate cookie和session原理回顾
  12. grunt--自常用配置文件--js/样式压缩打包,sass工具整合使用
  13. JQuery收集
  14. Html5深受欢迎的理由
  15. flex弹性盒子布局
  16. 使用freemarker生成xml模板
  17. [转载]Meta Learning单排小教学
  18. RequireJS跨域加载html模版后被转成JS问题分析及解决
  19. InnoDB中锁的算法(2)
  20. Swift学习目录

热门文章

  1. Java 终于在 Java 8 中引入了 Lambda 表达式。也称之为闭包或者匿名函数。
  2. Linux下,postgreSQL的查看与重启
  3. IDEA springboot maven 引用第三方jar包
  4. centos7下使用yum安装mysql5.7.10
  5. nnexus3 破解密码
  6. tp5 关键字模糊查询 日期查询 小于大于某范围等查询的优点
  7. todo---git 生成密钥 原理分析
  8. scrapy框架4——下载中间件的使用
  9. 第五章 模块之random 、hashlib、time /datetime
  10. python内置模块介绍(一)