sed初级教程
简介
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在读取非常庞大的文件时不会出现问题。屏幕编辑程序必须将整个文件(或者它的一些庞大的部分)读入内存,这将会产生内存溢出或者在处理虎大的文件时速度非常慢。

模式空间的内容是动态的,而且并不总是匹配最初的输入行。
模式空间的操作
- 生成输入行的备份。
- 修改模式空间中的备份。
- 将备份输出到标准输出。
使用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不能是同一个文件。
sed初级教程的更多相关文章
- Python图像处理库:Pillow 初级教程
Python图像处理库:Pillow 初级教程 2014-09-14 翻译 http://pillow.readthedocs.org/en/latest/handbook/tutorial.html ...
- shellKali Linux Web 渗透测试— 初级教程(第三课)
shellKali Linux Web 渗透测试— 初级教程(第三课) 文/玄魂 目录 shellKali Linux Web 渗透测试—初级教程(第三课) 课程目录 通过google hack寻找测 ...
- Mac OS X Terminal 101:终端使用初级教程
Mac OS X Terminal 101:终端使用初级教程 发表于 2012 年 7 月 29 日 由 Renfei Song | 文章目录 1 为什么要使用命令行/如何开启命令行? 2 初识Com ...
- Unix sed实用教程系列目录[已完成]
本系列文章已经译完了,译自awk-sed@theunixschool,收获颇丰,作者没有讲明白的我做了补充,并且尝试讲的更清楚,整理成系列索引,方便学习,开篇非译文,是我为了方便后面的理解写的一篇,感 ...
- Unix sed实用教程开篇
已经看了一段时间的Linux Shell编程了,也能完成一些基本的使用,为了加深理解,恰好看到了The Unix School的一个sed&awk教程,不是简单的命令参数堆积,而是一个相当实用 ...
- Coding 初级教程(二)——上传已有项目
Coding 初级教程(二)——上传已有项目 [摘要:方针读者 :已具有 Coding.net 的账号. 本文首要先容若何把项目上传到 Coding.net 上. 分两种环境,一种是项目已归入到 gi ...
- [初级教程]用SecureCRT+Xming轻松远程实现Linux的X DISPLAY
[初级教程]用SecureCRT+Xming轻松远程实现Linux的X DISPLAY 发布者:sqqdugdu 时间:10-06 阅读数:2117 测试环境:RHEL 6.1,SecureCRT 5 ...
- awk与sed简明教程
看到大牛写的关于awk和sed的简明教程,写得很好,为了尊重作者,就不全文转载了,这里标记下链接,方便以后查阅. awk简明教程:http://coolshell.cn/articles/9070.h ...
- Window服务初级教程以及log4net配置文件初始化
Window服务初级教程:http://www.jb51.net/article/48987.htm 另外,配置log4net这个日志功能的时候需要初始化,不然会报没有初始化的错误,而且初始化的节点应 ...
随机推荐
- Pythonrandom模块(获取随机数)常用方法和使用例子
Python random模块(获取随机数)常用方法和使用例子 这篇文章主要介绍了Python random模块(获取随机数)常用方法和使用例子,需要的朋友可以参考下 random.random ra ...
- springboot中使用mybatis的分页插件pageHelper
首先在pom.xml中配置 <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot ...
- CSS3 Transition 过渡
CSS3属性中有关于制作动画的三个属性:Transform,Transition,Animation: Transition:对元素某个属性或多个属性的变化,进行控制(时间等),类似flash的补间动 ...
- 原生JavaScript常用本地浏览器存储方法二(cookie)
JavsScript Cookie概述 cookie是浏览器提供的一种机制,它将document对象的cookie属性提供给JavaScript.可以由JavaScript对其进行控制,而并不是Jav ...
- iOS底层框架浅析
1.简介 IOS是由苹果公司为iPhone.iPod touch和iPad等设备开发的操作系统. 2.知识点 iPhone OS(现在叫iOS)是iPhone, iPod touch 和 iPad 设 ...
- Flutter状态管理之provide和provider的使用区别
说道状态管理不得不说谷歌的亲自开发的两款状态管理Widget:第一个是provide,第二个是provider. 这两个的区别就是一个出来的早,现在好像没整么更新了.第二个是2019才出来的目前的版本 ...
- python 爬虫实例(一)
一个简单的爬虫工程 环境: OS:Window10 python:3.7 安装一些库文件 pip install requests pip install beautifulsoup4 pip ins ...
- WUSTOJ 1347: GCD(Java)互质
题目链接:1347: GCD Description 已知gcd(a,b)表示a,b的最大公约数. 现在给你一个整数n,你的任务是在区间[1,n)里面找到一个最大的x,使得gcd(x,n)等于1. I ...
- truncate删除一个分区,测试全局索引是否失效
目的,有一个清理数据的需求,需要删除历史的一个分区所有记录信息,但是存在主键global索引,如何更好的维护. 如下测试流程一 提前创建好一个已时间created 字段作为分区键的范围分区表 SQL& ...
- svn提交时把node_modules忽略掉
空白处右键>选中TortoiseSVN>设置(settings)>常规设置(General)>Subversion>编辑(edit)>在弹出的config文件中找g ...