Sed简介
sed
 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern 
space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有
 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
命令格式:sed -options script file 或 sed -options -f scriptfile file
系统:Ubuntu11.10
sed:GNU sed version 4.2.1
options命令项
-n   关闭自动输出模式空间的内容
-e script   要执行的脚本命令
-f file   要执行的脚本命令文件,如果是大量脚本,你可以将他们写入一个文件然后用-f指定该文件作为要执行的命令
-i[suffix]   就地编辑文件,如果指定了后缀[suffix],则备份源文件
-l N   指定要编辑的行,可指定多行,如1,3表示1 2 3行
--posix   禁用所有GUN扩展
-r   在脚本命令中使用扩展正则表达式
-s   将同时处理的多个文件分开,而不是将他们作为一个整体的长数据流
-u   从输入文件导入最小少的数据,更频繁的刷新输出缓存
script脚本命令
a   在当前行后面加入一行文本
b lable   分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾
c   用新的文本改变本行的文本
d   从模板块(Pattern space)位置删除行
D  删除模板块的第一行
i   在当前行上面插入文本
h   拷贝模板块的内容到内存中的缓冲区
H  追加模板块的内容到内存中的缓冲区
g   获得内存缓冲区的内容,并替代当前模板块中的文本
G  获得内存缓冲区的内容,并追加到当前模板块文本的后面
l   列表不能打印字符的清单
n  读取下一个输入行,用下一个命令处理新的行而不是用第一个命令
N  追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
p   打印模板块的行
P  打印模板块的第一行
q  退出Sed
r file   从file中读行
w file   写并追加模板块到file末尾
W file   写并追加模板块的第一行到file末尾。
t label   if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾
T label   错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾
!   表示后面的命令对所有没有被选定的行发生作用
s/re/string   用string替换正则表达式re
=   打印当前行号码
#   把注释扩展到下一个换行符以前
以下的是替换标记:
* g 表示行内全面替换
* p 表示打印行
* w 表示把行写入一个文件
* x 表示互换模板块中的文本和缓冲区中的文本
* y 表示把一个字符翻译为另外的字符(但是不用于正则表达式)
例子:
将sed.ini文件中以Well开始的行后面添加 end;
| 1 | sed -e '/^Well/a end;' /etc/sed.ini | 
删除sed.ini文件的第7行到末尾的内容
| 1 | sed -e '7,$d' /etc/sed.ini | 
删除sed.ini中所有包含this的行
| 1 | sed -e '/this/d' /etc/sed.ini | 
将sed.ini文件中的this替换成that
| 1 | sed -e 's/this/that/g' /etc/sed.ini | 
将sed.ini文件中以Well开始的行的Well替换成Ok,并只打印匹配到的行
| 1 | sed -n -e 's/^Well/Ok/p' /etc/sed.ini | 
将sed.ini文件中的loveable替换成lovers
| 1 | sed -e 's/(love)able/1rs/g' /etc/sed.ini | 
多点编辑命令-e
将sed.ini文件中Well开始的行的Well替换成Ok,并且将行内的here后面加this
| 1 | sed -e 's/^Well/Ok/g' -e '/here/a this' /etc/sed.ini | 
读取sed.php中的内容并显示在sed.ini中所有以this开始的行后面
| 1 | sed -e '/^this/r /etc/sed.php' /etc/sed.ini | 
将sed.ini中所有包含php的行写入到sed.php文件中
| 1 | sed -e '/php/w /etc/sed.php' /etc/sed.ini | 
将---插入包含this的行前面
| 1 | sed -e '/this/i---' /etc/sed.ini | 
将sed.ini中包含this的行放到缓冲区并删除该行,然后将包含that的行用缓冲区的内容替换掉
| 1 | sed -e '/this/{h;d}' -e '/that/{p;x}' /etc/sed.ini | 
将sed.ini中包含this的行放到缓冲区,然后将其添加到包含that的行后
| 1 | sed -e '/this/{h;d}' -e '/that/G' /etc/sed.ini | 
将sed.ini中包含this的行的下一行中的that替换成this
| 1 | sed -e '/this/{n;s/that/this/} /etc/php.ini | 
打印sed.ini的内容直到第5行然后退出
| 1 | sed -e '5q' /etc/sed.ini | 
打印sed.ini并显示行号
将sed.ini文件中包含this的行用the new words替换
| 1 | sed -e '/this/c    he new words' /etc/sed.ini | 
打印sed.ini文件的第二行
| 1 | sed -n -e '2p' /etc/sed.ini | 
 
--转自
