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 |
--转自