linux下的文本处理工具---sed

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下的文本处理工具---sed相关的知识,希望对你有一定的参考价值。

                            文本处理工具sed
1sed介绍

Sed是一种非交互式的流编辑器,通过多种转换修改流经过它的文本。但是,默认情况下,sed并不改变原文件本身,而只是对流经sed命令的文本进行修改,并将修改后的结果打印到屏幕上。Sed处理文本时是以行为单位的,每处理一行就立即打印出来,然后在处理下一行,直至全文处理结束。

Sed可做的编辑动作包括删除、查找替换、添加、插入、从其他文件中读入数据等,如果想对修改后的流文件进行保存更改,则需要使用重定向对修改后输出的内容进行保存

Sed的用法:sed  [options] ‘command’  file

#optionssed可以接受的参数

#commandsed的命令集(一共25个)

#使用-e参数和分号连接多编辑命令,如下面例子:

技术分享

在上面的例子中,我们使用-e参数,将this字符串修改为that,line修改为LINE,此处便使用了-e参数,上面的命令也可以使用下面的分号来代替:

技术分享 

在使用分号对命令进行分段处理时,注意格式。

 

2、删除

可以使用sed命令对文件进行自定义删除,如下:删除文件中的第一行内容:

技术分享

上述的删除指定行进行输出时,对原文件不做修改,如果我们要对原文件进行修改,则需要使用重定向。

技术分享

如果不想使用重定向,那么使用  -i 参数也可以仅对原文件进行修改,并且不将修改后的内容进行打印输出:

技术分享 

删除指定范围的行:删除第一行到第三行

技术分享 

删除第一行到最后一行:此时因为文件中的内容都被删除,所以不会有任何输出

技术分享

删除最后一行:

技术分享

删除多与行,只保留指定行:只保留第5行:

技术分享

删除包含指定字符串的行:

技术分享

删除空行:注意此处的空行书写格式

技术分享 

3、查找替换

使用s命令可将查找到的匹配文本内容内容替换为新的文本,如下例:

技术分享 

上图中,将文本中所有的this字符串替换为that,下图将替换文本中开头的thisthat

技术分享

注意:如果一行中出现多个相同的字符串,如果不加g命令,则该命令默认只替换第一个出现的字符串,后面的不做修改,g命令表示全文中的匹配项进行替换,如下图中的实例:

技术分享

 

4、字符替换

使用y 命令可进行字符转换,其作用为将一系列字符逐个变换为另一系列的字符,但是需要注意的是,转换字符的长度要和被转换字符的长度相等,否则sed无法执行。

技术分享

如上图,当需要替换的字符长度相等时,则替换成功,如果替换字符长度不等时,则会报错。

 

5、插入文本

使用  i 或者 a 命令插入文本,其中 i 代表在匹配行之前插入,而 a 代表在匹配行之后插入。

技术分享

同样,我们也可以在特定的字符所在行前(后)插入指定的数据:

技术分享

 

6、读入文本

使用 r 命令可从其他文件中读取文本,并插入匹配行之后。

技术分享 

上面的实例将insert.txt中的文本内容插入到空行之后。

 

7、打印

使用 p 命令可进行打印,这里使用sed命令时一定要加-n参数,表示不打印没关系的行。因为sed命令是逐行进行操作的,所以我们在进行匹配修改的时候可以删除不必要的行,此时就需要-n的参数。

打印文件中指定的行:

技术分享 

我们可以看到,在上面的输出打印中,与删除命令相当接近:

技术分享 

技术分享

清读者仔细观察上图中两个不同命令打印结果的区别,p命令是逐行进行操作,如果遇到匹配成功的行,则进行操作后直接进行输出打印,也就是所会打印两次,而没有p命令的打印结果则只会输出一次匹配结果,所以,我们在使用p命令的时候需要配合-n参数,来将无关的行清除:

技术分享

 

8、写文件

Sed本身默认不修改原文件,而只是对缓冲区的文本做了修改并输出到屏幕,所以想保存修改后的文件,除了使用重定向和-i参数之外,还可以使用w命令将结果保存到指定文件。

技术分享

9、高级替换

上面介绍的是一些基础简单的sed操作,但在实际的操作环境中,并没有上述的那么简单,需要我们结合使用来对文本进行修改。例如:

替换匹配行的下一行,这时我们就需要n命令:将sed.txt文本中空行的下一行中line替换为LINE

技术分享 

 

将模式空间的内容放入存储空间以便于接下来的编辑:

实现该功能,就需要使用H/h/G/g这几个命令了

模式空间:当前输入行的缓冲区

存储空间:模式空间以外的一个预留缓冲区

H:将模式空间的内容追加到存储空间

h:将模式空间的内容复制到存储空间,覆盖原有的存储空间

G:将存储空间的内容追加到模式空间

g:将存储空间的内容复制到模式空间。

下图中的例子为,将第一行与第二行进行反转,以及第三行和第四行进行反转。

技术分享

 

10、sed脚本

我们可以编写一些sed脚本来定时对一些文件进行分析操作,以达到我们的自动化操作,我们可以把一些sed命令写进一个文件,然后使用-f命令来使用这个文件,以达到我们的目的,这个文件就是sed脚本。以下即为实例,注意,sed脚本文件可以自定义。

技术分享


以上是关于linux下的文本处理工具---sed的主要内容,如果未能解决你的问题,请参考以下文章

Linux下的强大工具之一sed(转),Shell必备

linux学习-文本处理工具sed

Linux文本处理工具之grep sed简概

Linux文本处理工具sed

Linux文本处理工具sed

Unix & Linux的文本处理工具 -- grep, sed & awk