sed的工作原理及使用

1.sed的概念

sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用非常普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出。sed 是基于Basic模式的,sed和vi都源于早期UNIX的ed工具,所以很多sed命令和vi的末行命令是相同的。

2.sed的工作原理

sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓

冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理

完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件

内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化

对文件的反复操作。

3.sed的命令行格式

sed命令行的基本格式为:

sed option ‘script‘ file1 file2 ...

sed option -f scriptfile file1 file2 ...

sed处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,命令行参数可

以一次传入多个文件,sed会依次处理。sed的编辑命令可以直接当命令行参数传入,也可以写

成一个脚本文件然后用-f参数指定,编辑命令的格式为/pattern/action

其中pattern是正则表达式,action是编辑操作。sed程序一行一行读出待处理文件,如果某

一行 与pattern匹配,则执行相应的action,如果一条命令没有pattern而只有action,这个

action将作用于待处理文件的每一行。

4.sed命令和选项

命令

a\ : 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行

c\ : 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行尾需

用”\"续行

i\ :在当前行之前插入文本。多行时除最后一行外,每行末尾需用”\"续行d删除     行

h : 把模式空间里的内容复制到暂存缓冲区

H :把模式空间里的内容追加到暂存缓冲区

g :把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容

G:把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面

l :列出非打印字符

p :打印行

n :读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理

q :结束或退出sed

r :从文件中读取输入行

! :对所选行以外的所有行应用命令

s :用一个字符串替换另一个

g :在行内进行全局替换

w :将所选的行写入文件

x :交换暂存缓冲区与模式空间的内容

y :将字符替换为另一字符(不能对正则表达式使用y命令)

注:红色字体标注的是重点掌握的

选项

-e :进行多项编辑,即对输入行应用多条sed命令时使用

-n :取消默认的输出

-f :指定sed脚本的文件名

5.sed的基本使用

1>/pattern/p:打印匹配pattern的行

使用p命令需要注意,sed是把待处理文件的内容连同处理结果一起输出到标准输出的,

因此p命令表示除了把文件内容打印出来之外还额外打印一遍匹配pattern的行。比如一个

文件file的内容是

满足以1开头的行并打印:

要想只输出处理结果,应加上-n选项,这种用法相当于grep命令

2> /pattern/d :删除匹配pattern的行

删除file中以6结尾的行

注意,sed命令不会修改原文件,删除命令只表示某些行不打印输出,而不是从原文件中删去。

3> /pattern/s/pattern1/pattern2/:查找符合pattern的行,如果不加g的话就

将该行第一个匹配pattern1的字符串替换为pattern2,如果加g的话就将该行所有pattern1替换为pattern2.

4>在替换中&符号和\1 的使用

&符号相当于要替换的字符串本身,\1和&符合有相同的作用 

5> sed -i : 做的操作会修改原文件

6>定址

例如打印file里的1-2行内容

5.模式空间和保持空间

sed在正常情况下,将处理的行读入模式空间(pattern space),脚本中

的“sedcommand(sed命令)”就一条接着一条进行处理,直到脚本执行完毕。然后

该行被输出,模式(pattern space)被清空;接着,在重复执行刚才的动作,文件

中的新的一行被读入,直到文件处理完毕。

一般情况下,数据的处理只使用模式空间(pattern space),按照如上的逻辑即

可完成主要任务。但是某些时候,使用通过使用保持空间(hold space),还可以

带来意想不到的效果。

模式空间:可以想成工程里面的流水线,数据之间在它上面进行处理。

保持空间:可以想象成仓库,我们在进行数据处理的时候,作为数据的暂存区域。

正常情况下,如果不显示使用某些高级命令,保持空间不会使用到!

sed命令:

+ g:[address[,address]]g 将hold space中的内容拷贝到pattern space中,原来                                  pattern space里的内容清除

+ G:[address[,address]]G 将hold space中的内容追加到pattern space\n后

+ h:[address[,address]]h 将pattern space中的内容拷贝到hold space中,原来                                   的hold space里的内容被清除

+ H:[address[,address]]H 将pattern space中的内容追加到hold space\n后

+ d:[address[,address]]d 删除pattern中的所有行,并读入下一行到pattern中

+ D:[address[,address]]D 删除multiline pattern中的第一行,不读入下一行

+ x:交换保持空间和模式空间的内容

1>给test文件里的每一行后加一空行

2>用sed模拟出tac的功能(倒序输出)

解析逆序的过程:

如果是第一行的话,先读取到pattern space,再将其拷贝到hold space,不是最

后一行的话,删除pattern space 里的东西,在进行下次读取,然后将hold里的内

容追加到pattern,在将pattern拷贝到hold,重复上述的过程,将将文件的内容逆

序了。

3>追加匹配行到文件结尾

4>行列转换

时间: 2024-10-13 01:45:19

sed的工作原理及使用的相关文章

Sed工作原理

sed是一个非交互式的流编辑器.所谓非交互式,是指使用sed只能在命令行下输入编辑命令来编辑文本,然后在屏幕上查看输出:而所谓流编辑器,是指sed每次只从文件(或输入)读入一行,然后对该行进行指定的处理,并将结果输出到屏幕(除非取消了屏幕输出又没有显式地使用打印命令),接着读入下一行.整个文件像流水一样被逐行处理然后逐行输出. 下面我们看一下sed的工作过程. sed不是在原输入上直接进行处理的,而是先将读入的行放到缓冲区中,对缓冲区里的内容进行处理,处理完毕后也不会写回原文件(除非用shell

LVS集群之工作原理

  首先我们要了解LVS的工作机制: LVS里Director本身不响应请求,只是接受转发请求到后方,Realservers才是后台真正响应请求. LVS 工作原理基本类似DNAT,又不完全相像,它是一种四层交换,默认情况下通过用户请求的地址和端口来判断用户的请求,从而转发到后台真正提供服务的主机,而判断这种请求的是通过套接字来实现,所以四层就可以实现. 而且这个转发的过程对用户而言是透明的(简单的讲,就是用户访问DR的IP,而DR转发给RSS,而用户不知道这个过程) LVS的工作模式: 1.D

LVS介绍及工作原理图解

很多人使用过LVS集群系统,但对于LVS集群,大多数人不清楚它到底是个什么东西.接下来我们就聊聊LVS及其工作原理. 一.lvs介绍 LVS的英文全名为"Linux Virtual Server",即Linux虚拟服务器,是一个虚拟的四层交换器集群系统,根据目标地址和目标端口实现用户请求转发,本身不产生流量,只做用户请求转发,目前是负载均衡性能最好的集群系统. 二.Lvs原理介绍 图示如下: 1.首先用户向负载均衡器调度器(Director Server)发起请求,负载均衡器将请求发往

CentOS 6.5 分布式文件系统之MogileFS工作原理及实现过程

   MogileFS是一套高效的文件自动备份组件,由Six Apart开发,广泛应用在包括LiveJournal等web2.0站点上.MogileFS由3个部分组成:    第1个部分:是server端,包括mogilefsd和mogstored两个程序.前者即是mogilefsd的tracker,它将一些全局信息保存在数据库里,例如站点domain,class,host等.后者即是存储节点(store node),它其实是个HTTP Daemon,默认侦听在7500端口,接受客户端的文件备份

LVS的工作原理和相关算法

首先我们要了解LVS的工作机制: LVS里Director本身不响应请求,只是接受转发请求到后方,Realservers才是后台真正响应请求. LVS 工作原理基本类似DNAT,又不完全相像,它是一种四层交换,默认情况下来通过用户请求的的地址和端口,来判断用户的请求,从而转发到后台真正提供服务的主机,而判断这种请求的是通过套接字来实现,所以四层就可以实现.而且这个转发的过程对用户而言是透明的(简单的讲,就是用户访问的是DR的IP,而DR转发给RSS,而用户不知道这个过程) LVS的工作模式 1.

分布式文件系统之MogileFS工作原理及实现过程

MogileFS是一套高效的文件自动备份组件,由Six Apart开发,广泛应用在包括LiveJournal等web2.0站点上.MogileFS由3个部分组成:   第1个部分:是server端,包括mogilefsd和mogstored两个程序.前者即是mogilefsd的tracker,它将一些全局信息保存在数据库里,例如站点domain,class,host等.后者即是存储节点(store node),它其实是个HTTP Daemon,默认侦听在7500端口,接受客户端的文件备份请求.在

LVS之原理篇--深入全面理解LVS工作原理

一.介绍 LVS是Linux Virtual Server的简写,即Linux虚拟服务器,是一个虚拟的服务器集群系统.该项目由章文嵩博士成立,是中国国内最早出现的自由软件项目之一. 使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能.高可用的服务器群集,它具有良好可靠性.可扩展性和可操作性.从而以低廉的成本实现最优的服务性能. 负载均衡技术有很多实现方案,如基于DNS域名轮流解析的方法.基于客户端调度访问的方法.基于应用层系统负载的调度方法,还有基于IP

LVS 工作原理解析

LVS即Linux Virtual Server,淘宝大牛章文嵩读博士时发起的开源软件项目,是性能非常好的四层负载均衡集群服务,Linux内核2.4以后已经被直接收录至内核. LVS的工作模式: 在了解工作模式之前首先要晓得为什么会有不同的工作模式,用户的请求进来会先发送到director(virtual server),然后director通过一定的调度算法把请求比较公平的分发到后端的real server,那么自然由real server响应回去给用户. 本文中提到的缩写解释: VIP: D

DRBD 安装配置、工作原理及故障恢复

DRBD 安装配置.工作原理及故障恢复 一.DRBD 简介 DRBD的全称为:Distributed ReplicatedBlock Device(DRBD)分布式块设备复制,DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群.其实现方式是通过网络来镜像整个设备.你可以把它看作是一种网络RAID.它允许用户在远程机器上建立一个本地块设备的实时镜像. 1. DRBD是如何工作的呢? (DRBD Primary)负责接收数据,把数据写到本地磁盘并发送给另一台主机(DRBD Secondar