sed工具

来源:互联网 发布:虚拟天文馆软件下载 编辑:程序博客网 时间:2024/05/17 09:18

一、什么事sed:
sed是一种流编译器,在shell和makefile中使用非常普遍,他就是把 上一步的的输出内容,变成sed的输入,经过一系列的编译操作,转换成自己需要的另一种格式输出,sed是一种在线处理模式,一次只处理一行,在处理一行时,先把内容从磁盘中提取到内存中,然后在内存中进行处理。处理完成后输出到屏幕上,源文件的内容不变,除非使用的输入从定向到源文件。这种处理方式就是sed,他的处理模式就是模式空间。
这里写图片描述

二、sed命令:
命令格式:
sed [选项] ‘[动作]’ 文件名
选项:
-n:一般sed会把所有的内容都输出到屏幕上,但是加了-n选项之后只会把经历过sed命令处理的内容输出到屏幕上。
-e:允许对输入数据应用多条sed命令处理编译
-i :对经过sed处理过的数据直接修改读取数据的文件,不输出到屏幕。

动作:
a:追加,在读取文件的当前行后添加一行或者多行。
c:行替换,用c后面的字符串替换原来的数据的行。
i :插入,在当前行的前面插入一行或者多行
p:打印,输出指定的行
s:字符串替换,用一个字符串替换另外一个字符串。格式为”行范围s/旧字符串/新字符串/g”(如果不加g的话,则表示只替换每行第一个匹配的串)。
三、定址
定址取决于对那些行进行编辑。地址的格式可以是数字、正则表达式,或二者结合,如果没有指定地址,则sed将处理文件的所有行。
1、数字定址
例1:输出第2到4行
这里写图片描述
例2:将第二行全部替换成hello wrold.
这里写图片描述
2、正则表达式”/pattern/action”。
例1:将以字母开头的行中的数字2替换成two。
这里写图片描述
例2:删除出现字母的行
这里写图片描述
四、模式空间与保持空间
保持空间:用来存储数据,相当于一个仓库,它不能对数据进行处理。
模式空间:专门以行为单位对数据进行处理。
一般情况下,如果不显示的使用一些选项的话,是不会用到保持空间的。

命令:
g:将保持空间的内容拷贝到模式空间中,会将模式空间原来的值覆盖掉。
G:将保持空间的内容追加到模式空间中。
h:将模式空间的值拷贝到保持空间,会将保持空间原来的值覆盖掉。
H:将模式空间的值追加到保持空间中。
d:删除模式空间的所有行,并读下一行到模式空间。
D:删除模式空间的第一行,不读下一行到模式空间。
n:输出模式空间的行,读取下一行替换当前模式空间的行,接着执行下一条处理命令而不是第一条命令。
N:读入下一行,追加到模式空间行后面,此时模式空间中有两行。
x:交换模式空间和保持空间的内容。

例1:给每一行结尾添加一行空行
这里写图片描述
解释:当sed处理文件的时候,每一次都读取一行到模式空间,然后再’G’也就是从保持空间再读一行追加到模式空间,但是保持空间什么都没有啊,所以就读一个空行到模式空间,然后再将模式空间的值打印出来打印出来。

例2:用sed模拟实现tac(倒序打印)功能
这里写图片描述
解释:如果不是第一行,就把保持空间的行全部都追加到模式空间中。然后再将模式空间中的行全部都保存到保持空间中,覆盖掉保持空间原来的内容。如果不是最后一行的话,在删除模式空间中的所有内容,并读取一行到模式空间中。
这里写图片描述
例3:追加匹配行到文件结尾
这里写图片描述
解释:如果用正则匹配到了某一行,则就将这一行追加到保持空间里面。如果是最后一行,则就将保持空间的内容追加到模式空间中。

例4:将一列内容转化成一行内容
这里写图片描述
解释:因为模式空间是按行进行处理的,如果模式空间只有一行内容,则就会去掉换行符。如果模式空间有多行内容的话,则就会加上换行符。首先将所有行都保存到保持空间。如果是最后一行的话,则x将保持空间和模式空间的值进行交换。然后将模式空间中的所有换行符用空格替换。
为什么上面用了两条命令输出的结果有些细微的差别,这是因为H的时候,保持空间中有空行,直接追加的话会追加到空行的后面。

例5、求1到100的求和
这里写图片描述
解释:与例4基本相同,通过seq生成1到100的序列,然后将所有行存到保持空间,最后一行时将保持空间和模式空间进行交换,然后用”+”替换所有的换行符。最后会生成如上表达式,再经过bc进行计算。

例6:打印偶数行
这里写图片描述
解释:sed每次都会自动读取一行,然后直接执行n命令再读取一行到模式空间覆盖掉原来的行。这时候再执行p命令。所以每次打印的就是偶数行。

例7:打印奇数行
这里写图片描述
五、使用标签
定义标签: “:标签名”
跳到标签: “b标签名”

例:使用标签求1到100的求和
这里写图片描述
解释:”:a”就表示一个a标签,ba就表示跳转到a标签。每读一行,都使用b跳转到标签处继续向后执行,就类似于一个循环,直到最后一行才跳出循环。

0 0
原创粉丝点击