码迷,mamicode.com
首页 > 其他好文 > 详细

sed工具的使用

时间:2016-06-29 01:16:46      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:编辑器   程序   

sed:流式编辑器,把前一个程序的输出结果引入sed的输入,经过一系列编辑命令转换为另种格式输出

命令的基本格式:

sed option ‘script‘ file1 file2 ...

sed option -f scriptfile file1 file2 ...

其中处理的文件可以由标准输入重定向得到,也可由命令行参数传入,sed会依次处理传入的多个文件,然后逐行进行处理

sed的编辑命令可以直接当命令行参数传入,也可以写成一个脚本文件然后由-f参数指定,编辑命令的格式为 /pattern/action

pattern为正则表达式,action为符合条件的正则表达式所要执行的相应动作

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

区中,称为“模式空间”(pattern space),接着使用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往标准输出。接着处理下一行,这样不断重复,直到文件末尾。而该操作使文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件

如下图所示,sed的操作过程

技术分享

sed的使用操作

1.输出符合正则表达式的行,只输出以2结尾的行,需要加上-n选项

技术分享

2.删除符合正则表达式的行,删除以3结尾的行

技术分享

3.查找符合pattern的行,将该行第一个匹配pattern1的字符串替换为pattern2,需要加上s指令

技术分享技术分享

技术分享

其中使用-i选项会更改文件的内容

4.查找符合pattern的行,将该行所有匹配pattern1的字符串替换为pattern2,在编辑命令后加上g表示全替换

查找以1开头的行,将该行的每个1都替换为~1~,其中&符号表示pattern1的内容

技术分享

对所有数字行进行处理

技术分享

对数字和字母行进行处理

技术分享

给每行后加上换行符

技术分享

4.定址:用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或两者的结合,如果没有指定地址,sed将处理输入文件的所有行

打印指定行

技术分享

打印某一区域内的所有行

技术分享

也可通过管道先找到前15行再显示出后5行,不过使用sed命令就更简便些了

如果没有定址,sed将显示所有行

技术分享

查找从1到3结尾的行并显示

技术分享

5.保持空间与模式空间转换相关命令和选项

技术分享

技术分享

技术分享

1.给每行的结尾加一个空行,因为保持空间开始的内容为空,因此把保持空间的内容追加到模式空间中,即给每行后加上一个空行

技术分享

2.逆序输出文件中内容

可以使用tac工具输出

技术分享

使用sed命令实现

技术分享

该条编辑命令为:若为第1行则不做紧跟在后边的G操作,但做h(将模式空间内容拷贝到保持空间,删除原来保持空间的内容)操作,即不把保持空间的内容追加到模式空间,若不是第1行,则做G操作,若为最后一行,则不做d操作,若不为最后一行,则删除模式空间的内容,并读入下一新行到模式空间中

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

查找以9结尾的并追加到文件结尾

技术分享

若为第一行则先进行H操作,再拷贝一次

技术分享

4.行列转换

技术分享

技术分享

技术分享

在模式空间行的结尾进行x,每行的结尾的\n用空格代替

5.1到100的求和

H表示把模式空间的内容追加到保持空间中去,H可以带一个地址,如$,表示到文件的末尾,然后用x将之取到模式空间中,把\n替换成空格,再打印 

技术分享

也可使用类C式的goto语句

技术分享

:a表示标签a,ba表示跳转(break)到a标签,$!表示最后一行不做后续操作,$!ba表示最后一行不跳转到标签a,结束此次操作

6.打印偶数行或基数行

技术分享

7.注释转换

给每行加上注释,再底行模式下使用以下命令

技术分享

对满足正则表达式的行去注释

技术分享

给满足正则表达式的行加上注释

技术分享

从某行开始加上后半部分注释

技术分享

注释转换

技术分享

技术分享


sed工具的使用

标签:编辑器   程序   

原文地址:http://10541559.blog.51cto.com/10531559/1793810

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!