天天看点

高效而轻松的sed命令

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

sed命令的使用规则

命令格式如下:

其中option是可选的,常用的option有如下几种:

常用的命令有以下几种:

命令示例 假设有一个本地文件test.txt,文件内容如下:

本节将使用该文件详细演示每一个命令的用法。

a命令

本例命令部分中的1表示第一行,同样的第二行写成2,第一行到第三行写成1,3,用$表示最后一行,比如2,$表示第二行到最后一行中间所有的行(包含第二行和最后一行)。 本例的作用是在第一行之后增加字符串”add one”,从输出可以看到具体效果。

本例表示在第一行和最后一行所有的行后面都加上”add one”字符串,从输出可以看到效果。

本例表示在包含”first”字符串的行的后面加上字符串”add one”,从输出可以看到第一行包含first,所以第一行之后增加了”add one”

本例使用正则表达式匹配行,^ha.*day$表示以ha开头,以day结尾的行,则可以匹配到文件的”happy everyday”这样,所以在该行后面增加了”add one”字符串。

i命令

i命令使用方法和a命令一样的,只不过是在匹配的行的前面插入字符串,所以直接将上面a命令的示例的a替换成i即可,在此就不啰嗦了。

c命令

本例表示将最后一行替换成字符串”add one”,从输出可以看到效果。

本例将第四行到最后一行的内容替换成字符串”add one”。

本例将以ha开头,以day结尾的行替换成”replace line”。

d命令

本例删除以ha开头,以day结尾的行。

本例删除第四行到最后一行中的内容。

p命令

本例在屏幕上打印第四行到最后一行的内容,p命令一般和-n选项一起使用。

本例打印以ha开始,以day结尾的行。

s命令

实际运用中s命令式最常使用到的。

本例将文件中的所有line替换成text,最后的g是global的意思,也就是全局替换,如果不加g,则只会替换本行的第一个line。

本例首先匹配以ha开始,以day结尾的行,本例中匹配到的行是”happy everyday”这样,然后再将该行中的happy替换成very happy。

这个例子有点复杂,先分解一下。首先s命令的模式是s/old/new/g这样的,所以本例的old部分即\(.*\)line$,sed命令中使用\(\)包裹的内容表示正则表达式的第n部分,序号从1开始计算,本例中只有一个\(\)所以\(.*\)表示正则表达式的第一部分,这部分匹配任意字符串,所以\(.*\)line$匹配的就是以line结尾的任何行。然后将匹配到的行替换成正则表达式的第一部分(本例中相当于删除line部分),使用\1表示匹配到的第一部分,同样\2表示第二部分,\3表示第三部分,可以依次这样引用。比如下面的例子:

正则表达式中is两边的部分可以用\1和\2表示,该例子的作用其实就是删除中间部分的is。

本文转自Linux就该这么学博客园博客,原文链接:http://www.cnblogs.com/linuxprobe/p/5377883.html,如需转载请自行联系原作者

继续阅读