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.注释转换
给每行加上注释,再底行模式下使用以下命令
对满足正则表达式的行去注释
给满足正则表达式的行加上注释
从某行开始加上后半部分注释
注释转换
原文地址:http://10541559.blog.51cto.com/10531559/1793810