我们今天来学习下Unix sed的知识.在Unix系统中,许多编辑工作都是用vi来完成的,因为vi是Unix系统上典型的编辑器,在很多时候,并不必须启动vi,您可能正在写一个shell程序,或用管道在进程之间传递信息,此时需要以非交互式的方式来编辑,而Unix sed在这时候就很有作用了.
Unix sed的名字来源于stream editor(流编辑器),是个过滤文本的工具.在使用sed编辑文件时,可以指定文件名,或从标准输入中得到输入.sed每次读一行,并对每行作指定的编辑工作.同样可以指定特定的行号,供Unix sed进行编辑.sed的许多用法与ed相同.
可以用下面两种方式调用Unix sed:
- sed [-n][-e] 'command' filename(s)
- sed [-n] -f scriptfile filename(s)
sed的第一种格式用于在命令行中执行命令.默认情况下,sed将显示所有行,-n 表示只需要打印p命令指定的行.第二种格式允许指定一个或多个包含编辑命令的脚本.下面是Unix sed的两种不同格式中的三个选项进行总结:
-n 只打印用p命令指定的行
-e command -e后的参数是一个编辑命令
-f filename -f后的参数是包含编辑命令的文件
下面看几个例子:
- sed -n 16,18p passwd.test 打印passwd.test的16到18行.
- sed 16,18d passwd.test 删除passwd.test的16到18行.
- sed '/bsh/ d' passwd.test 删除包含bsh的行.
- sed '/bsh/ ld' passwd.test 删除除bsh行以外的行
前面仅仅用了Unix sed中的一些很表面的命令,下面总结了Unix sed的命令:
命令 说明
a 添加文本
b 转移到标签处
c 用文本替换行
d 删除当前文本缓冲区
i 插入文本
P 从模式空间开始打印,知道出现新行
r 读入模式
s 替换模式
y 转换字符
【编辑推荐】