【工作经历:阿里巴巴搜索技术研发中心QA ,百度新产品测试部QA】 【领域:测试分析,自动化测试,性能测试,安全测试 】 【个人定位:高级测试工程师+培训师+领域产品专家】

sed最全的用法

上一篇 / 下一篇  2008-10-22 13:54:53 / 个人分类:Linux

本来以为对sed的使用已经娴熟于心了。后来查看一切其他的发行安装软件里,有对sed更高深的用法。
于是就搜索出了sed的大量用法。

整理一下,我已经打印出来了,也共享一下吧。总共21页。
用这个东西来进行自动修改配置,可以方便很多,大大节省自己的劳动力。呵呵。

============================================================

SED手册- 1. Introduction

http://phi.sinica.edu.tw aspac@phi.sinica.edu.tw (2001-07-29 08:05:00)

 

1.Introduction

 Sed(Stream EDitor)UNIX系统上提供将编辑工作自动化的编辑器,使用者无需直接编辑资料。使用者可

 利用sed所提供20多种不同的函数参数,组合([1])它们完成不同的编辑动作。此外,由於sed

 以行为单位编辑文件,故其亦是行编辑器(line editor)

 一般sed最常用在编辑那些需要不断重覆某些编辑动作的文件上,例如将文件中的某个字串替换成另一个字

 串等等。这些相较於一般UNIX编辑器(交谈式的,viemacs)用手动的方式修改文件, sed用起来较省力。

 下面几节将分别介绍:

 

何时使用sed

何处获得sed

sed能做那些编辑动作

sed如何工作

1.1何时使用sed

 在修改文件时,如果不断地重覆某些编辑动作,则可用sed自动一次执行这些编辑动作。例如要使received

 档内1000封电子信件内的发信人属名"Tom"改成"John" ,此时只要在命令列上执行一简单的sed命令就可

 把档内所有的"Tom"字串替换成"John"

 再者,当文件需要许多不同编辑动作时,sed一次可执行那些不同的编辑动作。例如sed能一次执行完将

 文件中所有空白行删除、替换字串、并将使用者输入的文字添加在文件的第六行等等不同的编辑动作。

 

 

1.2何处获得sed

 一般的UNIX系统,本身即附有sed。不同的UNIX系统所附的sed版本亦不尽相同。若读者所使用的UNIX

 系统上未附有sed ,则可透过anonymous ftp到下列地方去取得:

phi.sinica.edu.tw:/pub/GNU/gnu

gete.sinica.edu.tw:/unix/gnu

ftp.edu.tw:/UNIX/gnu

ftp.csie.nctu.edu.tw:/pub/Unix/GNU

ftp.fcu.edu.tw: /pub3/UNIX/gnu

axp350.ncu.edu.tw:/Packages/gnu

leica.ccu.edu.tw :/pub2/gnu

mail.ncku.edu.tw :/pub/unix/gnu

bbs.ccit.edu.tw :/pub1/UNIX/gnu

prep.ai.mit.edu.tw:/pub/gnu

 

1.3 sed能做那些编辑动作

 sed可删除(delete)、改变(change)、添加(append)、插入(insert)、合、交换文件中的资料行,或读入其它

 档的资料到文件中,也可替换(substuite)它们其中的字串、或转换(tranfer)其中的字母等等。例如将文件中的

 连续空白行删成一行、"local"字串替换成"remote""t"字母转换成"T"、将第10行资料与第11资料合

 等。

 

1.4 sed如何工作

 如同其它UNIX命令, sed由标准输入读入编辑文件并由标准输出送出结果。下图表示sed将资料行"Unix"

 换成"UNIX" ,

 

 

 

在图中,上方standard input为标准输入,是读取资料之处; standard output为标准输出,是送出结果之处;

中间sed方块的下面两个虚线方块表示sed的工作流程。其中,左边虚线方块表示sed将标准输入资料置入

pattern space ,右边虚线方块表示sedpattern space中编辑完毕後的资料送到标准输出。

 

在虚线方块中,两个实线方块分别表示pattern spacesed scrīpt。其中, pattern space为一缓区,它是

sed工作场所;sed scrīpt则表示一组执行的编辑指令。

 

在图中,左边虚线方块"Unix"由标准输入置入pattern space ;接着,在右边虚线方块中, sed执行sed scrīpt

中的编辑指令s/Unix/UNIX/ ([2]) ,结果"Unix"被替换成"UNIX" ,之後, "UNIX"pattern space送到

标准输出。

 

 

 总合上述所言,sed由标准输入读入一行资料并放入pattern space, sed依照sed scrīpt的编辑指令逐

 一对pattern space内的资料执行编辑,之後,再由pattern space内的结果送到标准输出,接着再将下一行资

 料读入。如此重执行上述动作,直至读完所有资料行为止。 

 

SED手册- 2.使用sed

http://phi.sinica.edu.tw aspac@phi.sinica.edu.tw (2001-07-29 09:05:00)

 

  Sed命令列可分成编辑指令与文件档部份。其中,编辑指令负责控制所有的编辑工作;文件档表示所处理的档案。

  sed的编辑指令均由位址(address)与函数(function)两部份组成,其中,在执行时, sed利用它的位址参数来

  决定编辑的对象;而用它的函数参数([3])编辑。

  此外, sed编辑指令,除了可在命令列上执行,也可在档案内执行。其中差别只是在命令列上执行时,其前必

  须加上选项-e ;而在档案([4])内时,则只需在其档名前加上选项-f。另外, sed执行编辑指令是依照它

  们在命令列上或档内的次序。

 

  下面各节,将介绍执行命令列上的编辑指令 、sed编辑指令、执行档案内的编辑指令、执行多个档案的编辑、及

  执行sed输出控制。

 

2.1执行命令列上的编辑指令

2.2 sed编辑指令

2.3执行档案内的编辑指令

2.4执行多个档案的编辑

2.5执行sed输出控制

2.1.执行命令列上的编辑指令

  当编辑指令(参照[section 2.2])在命令列上执行时,其前必须加上选项-e。其命令格式如下:

    sed -e '编辑指令1' -e '编辑指令2' ...文件档 

 

其中,所有编辑指令都紧接在选项-e之後,并置於两个" ' "特殊字元间。另外,命令上编辑指令的执行是由

左而右。

 

  一般编辑指令不多时,使用者通常直接在命令上执行它们。例如,删除yel.dat110行资料,并将其

  馀文字中的"yellow"字串改成"black"字串。此时,可将编辑指令直接在命令上执行,其命令如下:

 

    sed -e '1,10d' -e 's/yellow/black/g' yel.dat 

 

在命令中,编辑指令'1,10d'([5])执行删除110行资料;编辑指令's/yellow/black/g'([6]) ,

"yellow"字串替换(substuite)"black"字串。

2.2 sed的编辑指令

  sed编辑指令的格式如下:

             [address1[,address2]]function[argument]

 

其中,位址参数address1address2为行数或regular expression字串,表示所执行编辑的资料行;函数参

function[argument]sed的内定函数,表示执行的编辑动作。

下面两小节,将仔细介绍位址参数的表示法与有哪些函数参数供选择。

 

2.2.1位址(address)参数的表示法

  实际上,位址参数表示法只是将要编辑的资料行,用它们的行数或其中的字串来代替表示它们。下面举几个例子

  说明(指令都以函数参数d(参照[section4.2])为例) :

删除档内第10行资料,则指令为10d

删除含有"man"字串的资料行时,则指令为/man/d

删除档内第10行到第200行资料,则指令为10,200d

删除档内第10行到含"man"字串的资料行,则指令为10,/man/d

  接下来,以位址参数的内容与其个数两点,完整说明指令中位址参数的表示法(同样也以函数参数d为例)

位址参数的内容:

位址为十进位数字:此数字表示行数。当指令执行时,将对符合此行数的资料执行函数参数指示的编辑动作。例如,

删除资料档中的第15行资料,则指令为15d(参照[section4.2])。其馀类推,如删除资料档中的第m行资料,

指令为md

 

位址为regular expression(参照[附录A]):

当资料行中有符合regular expression所表示的字串时,则执行函数参数指示的编辑动作。另外,

regular expression前後必须加上"/"。例如指令为/t.*t/d ,表示删除所有含两"t"字母的资料行。其中, "."

表示任意字元; "*"表示其前字元可重任意次,它们结合".*"表示两"t"字母间的任意字串。

 

位址参数的个数:在指令中,当没有位址参数时,表示全部资料行执行函数参数所指示的编辑动作;当只有一位址

参数时,表示只有符合位址的资料行才编辑;当有两个位址参数,address1,address2,表示对资料区执行

编辑, address1代表起始资料行, address2代表结束资料行。对於上述内容,以下面例子做具说明。

 

例如指令为

 

d

 

其表示删除档内所有资料行。

例如指令为

 

5d

 

其表示删除档内第五行资料。

例如指令为

 

1,/apple/d

 

其表示删除资料区,由档内第一行至内有"apple"字串的资料行。

例如指令为

 

/apple/,/orange/d

 

其表示删除资料区,由档内含有"apple"字串至含有"orange"字串的资料行

2.2.2有那些函数(function)参数

  下页表中介绍所有sed的函数参数(参照[chapter 4])的功能。

函数参数 功能

: label 建立scrīpt file内指令互相参考的位置。 

# 建立解 

{ } 集合有相同位址参数的指令。 

! 不执行函数参数。 

= 印出资料行数( line number ) 

a\ 添加使用者输入的资料。 

b label 将执行的指令跳至由:建立的参考位置。 

c\ 以使用者输入的资料取代资料。

d 删除资料。 

D 删除pattern space内第一个newline字母\前的资料。 

g 拷贝资料从hold space 

G 添加资料从hold spacepattern space 

h 拷贝资料从pattern spacehold space 

H 添加资料从pattern spacehold space 

l 印出l资料中的nonprinting characterASCII码。 

i\ 插入添加使用者输入的资料行。 

n 读入下一笔资料。 

N 添加下一笔资料到pattern space 

p 印出资料。 

P 印出pattern space内第一个newline字母\前的资料。 

q 跳出sed编辑。 

r 读入它档内容。 

s 替换字串。 

t label 先执行一替换的编辑指令,如果替换成牛p>则将编辑指令跳至: label处执行。 

w 写资料到它档内。 

x 交换hold spacepattern space内容。 

y 转换(transform)字元。 

虽然, sed只有上表所述几个拥有基本编辑功能的函数,但由指令中位址参数和指令与指令间的配合,也能使

sed完成大部份的编辑任务。

2.3执行档案内的编辑指令

  当执行的指令太多,在命令列上撰写起来十分混乱,此时,可将这些指令整理储存在档案

  (譬如档名为scrīpt_file ),用选项-f scrīpt_file ,则让sed执行scrīpt_file内的编辑指令。其命

  令的格示如下:

     sed -f scrīpt_file文件档 

 

其中,执行scrīpt_file内编辑指令的顺序是由上而下。例如上一节的例子,其可改成如下命令:

     sed -f ysb.scr yel.dat 

 

其中, ysb.scr档的内容如下:

1,10d

s/yellow/black/g

 

  另外,在命令列上可混合使用选项-e-f , sed执行指令顺序依然是由命令列的左到右,如执行至-f

  档案内的指令,则由上而下执行。

 

 

2.4执行多个文件档的编辑

  sed命令列上,一次可执行编辑多个文件档,它们跟在编辑指令之後。例如,替换

   white.datred.datblack.dat档内的"yellow"字串成"blue" ,其命令如下:

      sed -e 's/yellow/blue/g' white.dat red.dat black.dat

 

上述命令执行时, sedwhite.datred.datblack.dat顺序,执行编辑指令s/yellow/blue/(请参照[section 4.1] ,

进行字串的替换。

 

2.5.执行输出的控制

  在命令列上的选项-n ([7])表示输出由编辑指令控制。由前章内容得知, sed"自动的"将资料由

   pattern space输送到标准输出档。但藉着选项-n ,可将sed"自动的"的动作改成"被动的"由它所执行的

   编辑指令([8])来决定结果是否输出。

  由上述可知,选项-n必须与编辑指令一起配合,否则无法获得结果。例如,印出white.dat档内含有"white"

  字串的资料行,其命令如下:

 

      sed -n -e '/white/p' white.dat  

 

上面命令中,选项-n与编辑指令/white/p (参照[section4.6])一起配合控制输出。其中,选项-n将输出控制权

移给编辑指令;/white/p将资料行中含有"white"字串印出萤幕。

 

SED手册- 3.

http://phi.sinica.edu.tw aspac@phi.sinica.edu.tw (2001-07-29 13:05:00)

 

  一般在实际使用编辑器的过程中,常需要执行替换文件中的字串、搬移、删除、与搜寻资料行等等动作。

  当然,一般交谈式编辑器(viemacs)都能做得到上述功能,但文件一旦有大量上述编辑需求时,

  用它们编辑十分没有效率。本章将用举例的方式说明如何用sed自动执行这些编辑功能。此外,在本章

  例中,均以下述方式描述文件的需求:

           将文件中...资料,执行...(动作)

 

如此,目的是为了能将它们迅速的转成编辑指令。其中, " ...资料"部份,转成指令中的位址参数表示;

"执行...动作"部份,则转成函数参数表示 。另外,"执行...动作"要由数个函数参数表示时,则可利

"{ "" }"集合这些函数参数([9]) ,其指令形式如下:

        位址参数{

                函数参数1

                函数参数2

                函数参数3

                    .

                    :

                 }

 

上述指令表示,将对符合位址参数的资料,依次执行函数参数1、函数参数2、函数参数3 ...表示的动作。

下面各节,分别举例说明sed替换资料、移动、删除资料、及搜寻资料的命令。

3.1替换文件中的资料

3.2搬动文件中的资料

3.3删除文件中的资料

3.4搜寻文件中的资料

TAG: Linux

 

评分:0

我来说两句

日历

« 2024-04-26  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 164072
  • 日志数: 227
  • 建立时间: 2008-04-09
  • 更新时间: 2012-02-10

RSS订阅

Open Toolbar