利用被称为管道操作符的|,多个命令由管道连成了管道线。在UNIX或Linux系统中,流过管道线的信息(数据)就叫做流(stream)。为了编辑或修改一条管道中的信息,就运用流编辑器(stream editor),这也正是sed这个命令名字的由来。其中,s是stream的第一个字母,而ed是editor(编辑器)的头两个字母。 sed命令是构建在一个叫做ed的旧版的行编辑器之上的。sed命令的语法格式如下: sed [选项]……{以引号括起来的命令表达式} [输入文件] 其中,最常用的命令表达式是在一个文件中的指定数据行的范围内抽取某一模式(字符串),并用新的模式替代它。这个命令表达式的通用格式为:s/旧模式/新模式/标注,在这里s是substitute(替代)的首字母,而两个最常用的标志分别是g和n。g是globally(全局地)的首字母,表示要替代每一行中所出现的所有模式。n告诉sed只替代前n行中所出现的模式。 root@promote:~/backup# cat emp.fmt | sed -e 's/ /;/' 7369;SMITH CLERK 800 17-DEC-80 7499;ALLEN SALESMAN 1600 20-DEC-81 我们发现sed命令只替代了每行数据中的第一个空格,因为sed命令默认只搜索并替代所发现的第一个与搜索模式相匹配的字符(串)。为了替代每一行中的所有空格,需要运用g标志: root@promote:~/backup# cat emp.fmt | sed -e 's/ /;/g' 7369;SMITH;CLERK;800;17-DEC-80 7499;ALLEN;SALESMAN;1600;20-DEC-81 其实,即使不运用管道线,也可以获得相同的效果,而且看上去更简单些: root@promote:~/backup# sed -e 's/ /;/g' emp.fmt 7369;SMITH;CLERK;800;17-DEC-80 7499;ALLEN;SALESMAN;1600;20-DEC-81 虽然看上去简单些,但是有不少UNIX或Linx的大虾们还是偏爱运用管道操作,可能的原因是“看上去非常专业”,因为没有UNIX或Linux背景的用户看上去有点晕。 注意:以上的任何命令都不改变源文件(emp.fmt)中的任何信息。如果要保存经过sed命令替代后的数据,利用输出重定向再生成一个文件就行了。 |