sed 是linux命令中用于行数据处理的工具,能处理来自管道或者文件的输入。linux
语法: sed [选项] '[过滤字符][{]处理命令[}]',其中 []包围的表示不是强制必写。正则表达式
1. sed能对行进行处理缓存
-n: 安静模式,只输出作过处理的行,不然会重复输出处理的行。安静模式下只有显示的使用p才会输出到屏幕上。app
-e: 后面紧接处理命令,一次执行一个,后面还能够继续使用这个选项执行其余命令,避免使用管道或者不能多个命令同时使用的状况编辑器
-f: 后面接脚本文件工具
-r: 在处理命令中使用扩展正则表达式,默认是基础正则表达式spa
-i: 以文件做为输出,即直接修改文件,而不会输出到到屏幕ip
-c: 在-i的状况下,使用复制方式而不是直接修改文件的全部关系(ownership),应该就是不会修改文件的owner字符串
2. 处理命令有下面几种(若是不执行如下命令只要在命令前加!,例如'1!p'表示第一行不打印,其余命令相似):基础
p: 打印输出行,语法--> 'm,np',其中m,n是行号,最后一行用$表示,若是是一行则为'mp',若是m,n都没有值则表示当前行。例如第2到7行-->'2,7p',第5到最后 一行-->'5,$p'
i: 在某行以前插入内容,语法-->'mi xxxx',其中m为行号,例如在第三行以前插入hello--> '3i hello'
a: 在某行以后插入内容,语法相似i-->'ma xxxx',其中m为行号,例如在第三行以后插入nihao-->'3a nihao'
d: 删除某些行,语法--> 'm,nd',其中m,n是行号,相似p中的定义,例如删除2到5行-->'2,5d'
s: 替换行中的某些内容,语法--> 'm,ns/regEx/replace/[g]',其中m,n相似p中的定义,regEx是要被替换的内容,能够是正则表达式,replace是要替换的内容,g代 表所有都要处理,若是没有则只是替换从左到右的第一个匹配项
q/Q: 结束处理命令,后面的行将不会再处理。语法'q'。
n: 从流中读取下一行到pattern space进行处理,后面的命令将会只会处理下一行。
N: 从流中读取下一行扩展到pattern space一块儿处理,后面的命令会一块儿处理当前行和下一行。
w: 把当前的pattern space写入文件,语法-->'w xxx',xxx表明文件名。
W: 把当前的pattern space第一行写入文件,语法-->'w xxx',xxx表明文件名。
注意:sed是以行为单位的流编辑器,因此命令每次都从流里读取一行放到模式空间(Pattern space),处理一行完了就会输出模式空间的内容到屏幕(除非设置安 静模式-n)并清理模式空间,再重复下一行,因此模式空间就像一个临时工做缓存,以行为单位。这里还有一个缓存,叫保留空间(Hold space),这个缓存不会被 清除,能够保存一些想被跨行共享的数据。它俩之间能够相互转存,经过如下命令
h H Copy/append pattern space to hold space. --> 拷贝/扩展 从模式空间到保留空间
g G Copy/append hold space to pattern space. --> 拷贝/扩展 从保留空间到模式空间
x Exchange the contents of the hold and pattern spaces. --> 相互交换内容