linux常用命令学习之sed命令

来源:互联网 发布:淘宝秒刷销量一天千单 编辑:程序博客网 时间:2024/04/30 16:25

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 表示把一个字符翻译为另外的字符(但是不用于正则表达式)


元字符集参考:http://blog.csdn.net/luochuan/article/details/7346811


例子:

将sed.ini文件中以Well开始的行后面添加 end;

#sed -e '/^Well/a\ end;' /etc/sed.ini

删除sed.ini文件的第7行到末尾的内容

#sed -e '7,$d' /etc/sed.ini

删除sed.ini中所有包含this的行

#sed -e '/this/d' /etc/sed.ini

将sed.ini文件中的this替换成that

#sed -e 's/this/that/g' /etc/sed.ini

将sed.ini文件中以Well开始的行的Well替换成Ok,并只打印匹配到的行

#sed -n -e 's/^Well/Ok/p' /etc/sed.ini

将sed.ini文件中的loveable替换成lovers

#sed -e 's/(love)able/\1rs/g' /etc/sed.ini

多点编辑命令-e

将sed.ini文件中Well开始的行的Well替换成Ok,并且将行内的here后面加this

#sed -e 's/^Well/Ok/g' -e '/here/a\ this' /etc/sed.ini

读取sed.php中的内容并显示在sed.ini中所有以this开始的行后面

#sed -e '/^this/r /etc/sed.php' /etc/sed.ini

将sed.ini中所有包含php的行写入到sed.php文件中

#sed -e '/php/w /etc/sed.php' /etc/sed.ini

将---插入包含this的行前面

#sed -e '/this/i\---' /etc/sed.ini

将sed.ini中包含this的行放到缓冲区并删除该行,然后将包含that的行用缓冲区的内容替换掉

#sed -e '/this/{h;d}' -e '/that/{p;x}' /etc/sed.ini

将sed.ini中包含this的行放到缓冲区,然后将其添加到包含that的行后

#sed -e '/this/{h;d}' -e '/that/G' /etc/sed.ini

将sed.ini中包含this的行的下一行中的that替换成this

#sed -e '/this/{n;s/that/this/} /etc/php.ini

打印sed.ini的内容直到第5行然后退出

#sed -e '5q' /etc/sed.ini

打印sed.ini并显示行号

#sed -e '=' /etc/sed.ini

将sed.ini文件中包含this的行用the new words替换

#sed -e '/this/c\the new words' /etc/sed.ini

打印sed.ini文件的第二行

#sed -n -e '2p' /etc/sed.ini