分类: LINUX
2012-11-27 14:23:52
sed(流编辑器),用来在命令行中直接更改一个文件中的内容,这个命令对于使用
shell脚本自动批量更改大量文本文件比较有用.如你当前目录中有10000个文本文件
,假设文件名从text.1到text.10000,若你希望更改这10000个文件,一种方法是使用
如vi这样的文本编辑器来逐一进行更改,而对于优秀的管理员来说它们可能会书写一个
shell脚本来使用sed批量进行更改.本文就是sed这个命令的快速入门教程.
(1).基本格式
sed [-nefri] [动作] [Input_File]
选项:
-n :表示安静模式操作,也就是只将被更改的行输出,没更改的行不输出,默认sed
是输出所有的行
-e Scrip:指定sed的执行命令可以指定多个这个选项
-f Script_File:指定执行一个包含sed命令的脚本文件
-r:支持扩展的正则表达式(默认只支持基础的正则表达式)
-i:直接操作原文件,默认是不更改原文件的,而只是将更改结果直接输出到
标准输出上,可以使用这个选项来让sed直接更改原文件
动作:
基本格式: [n1[,n2]] Function
说明:n1和n2用来指定修改的范围(从第n1行到第 n2行),他们不一定必须指定
若都没指定则表示修改整个文件,若没有指定n2则表示修改的范围为从n1
到文件末尾.
注:n1,n2可以为数字,表示第N行(从1开始),当然也可以用'/Pattern/'来指定
表示使用查找来指定函数,即查找到最先包含Pattern的行为该指定的行数
Function有以下值:
(1).插入
[1].i String:表示当前行前面插入一行,内容为String
[2].a String:表示当前行后面插入一行,内容为String
(2).删除
d:表示将指定的行删除
(3).替换
[1].c String:指定整行替换为String
[2].s/Find_String/Replace/:表示用Replace替换Find_String
(4).打印
p:表示将选择的行打印出来
下面是一些实例:
假设文件 example.txt的内容如下
#############################example.txt内容开始###############
line1 hello world1
line2 hello world2
line3 hello world3
#############################example.txt内容结束###############
(1).在第1行后面插入一行,内容为Insert after line1
sed -i -e '1a Insert after line1' example.txt
结果example.txt内容为:
line1 hello world1
Insert after line1
line2 hello world2
line3 hello world3
(2).在第一行前面插入一行,内容为Insert before line1
sed -i -e '1i Insert before line1' example.txt
结果:
Insert before line1
line1 hello world1
Insert after line1
line2 hello world2
line3 hello world3
(3).删除第2到第4行
sed -i -e '2,4d' example.txt
结果:
Insert before line1
line3 hello world3
(4).打印第2行
sed -e '2p' example.txt
(5).将第2行替换为line2 hello world
sed -i -e '2c line2 hello world' example.txt
结果:
Insert before line1
line2 hello world
(6).替换第二行的hello world为world hello
sed -i -e '2s/hello world/world hello/' example.txt
结果:
Insert before line1
line2 world hello
好了sed简单入门就讲到这里了,由于sed命令实在太好用了,也太强大了,因此要
熟练使用sed还必须参考完整的sed手册页或其他高手写的教材,本文只是一个简单
的入门教材而已