sed命令的快速入门

来源:岁月联盟 编辑:exp 时间:2011-10-22

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手册页或其他高手写的教材,本文只是一个简单

 

的入门教材而已

 

本文出自 “huangyandong” 博客