Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1268388
  • 博文数量: 482
  • 博客积分: 13297
  • 博客等级: 上将
  • 技术积分: 2890
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-12 16:25
文章分类

全部博文(482)

文章存档

2012年(9)

2011年(407)

2010年(66)

分类: 嵌入式

2011-01-17 18:57:00

1. sed 命令简介

   Sed(a stream editor)是流线型、非交互式编辑器。它允许你执行与vi编辑器里一样的编辑任务。Sed 程序不是与编辑器交互式工作的,而是让你在命令行里敲入编辑的命令,给文件命名,然后在屏幕上查看命令输出结果。

2. sed 如何工作

sed 编辑器按一次处理一行的方式来处理文件,并把输出送到屏幕上。(每次对同一行匹配整个脚本的内容)

3. sed 可以用寻址的方式来决定想要编辑哪一行。

4. sed 命令和选项

选项    功能

 a\      在当前行(的下一行)添加一个文本行或者多个文本行

 c\      用新文本改变(取代)当前行里的文本

 d       删除行

 i\      在当前行之前(的前一行)插入文本(和a\相对应)

 h       把模式空间内容复制到一个固定缓存

 H       把模式空间内容添加到一个固定缓存

 g       得到固定缓存里所有的并复制到模式缓存,重写其内容

 G       得到固定缓存的内容并复制到模式缓存,添加到里面

 I       列出不打印的字符(制表符等)

 p       打印行

 n       读下一输入行,并开始用下一个命令处理换行符,而不是用第一个命令

 q       结束或退出sed

 r       从一个文件读入行

 !      把命令应用到除了选出的行以外的其他所有行

 s      把一个字串替换成另一个替换标志

 g      在一行上进行全局替换

 w      把行写到一个文件中

 x      用模式空间的内容交换固定缓存的内容

 y      把一个字符转换成另一个(不能和整则表达式元字符一起使用)


5、 sed元字符

基本上,grep和vi使用的元字符都可以用在sed中,&是特例:

  & :保存搜索串以便可以记在替换串里  

e.g.:   s/love/**&**/

     &号代表搜索串。串love将被星号包围的自身所替代;即love变成**love**

 
6 sed实例

  1> 打印:p命令

     sed '/north/p' datafile

       默认输出所有行,找到north的行重复打印

     sed –n '/north/p' datafile

       禁止默认输出,只打印找到north的行

  2> 删除:d命令

     sed '3d' datafile

       删除第三行,其余行输出到屏幕

     sed '3,$d' datafile

       从第3行到最后一行都删除,将剩余部分输出到屏幕

     sed '/north/d' datafile

       将含有north的行删除,其余输出到屏幕

  3> 替换:s命令

     sed 's/west/north/g' datafile

       解释:找到datafile中的所有west并替换成north,将替换后的内容输出到屏幕。

     sed 's/[0-9][0-9]$/&.5/' datafile

       解释:在替代串里的&字符代表在搜索串中真正找到的。

            每个以两个数字结尾的行都被它自己取代,且要在后面加上.5

     sed -n 's/Hemenway/Jones/gp' datafile

       解释:所有的Hemenway所在的位置都用Jones来取代,而且只有改变的行被打印。

            -n与p命令选项相结合来禁止默认输出。g代表全局替换

     sed -n 's/\(Mar\)got/\1ianne/p' datafile

       解释:模式Mar被封装在括弧里且在一个专用寄存器里存为标记1。

            在替换串里它将被引用做\1。然后用Marianne替代Margot。

     sed 's#3#88#g' datafile

       解释:s命令后面的字符是搜索串和替换串之间的分界符。

            默认的分界符是一个正斜杠,但也可以改变(只有使用s命令时)。

            无论s命令后面跟什么字符,它都是新的串分界符。

            当搜索包含一个正斜杠的模式,如路径或生日时,这种技巧可能有用

  4> 被选中的行的范围:逗号

     sed -n '/west/,/east/p' datafile

            打印在west和east之间的模式范围内所有行。如果west出现在east之后,

            则打印从west到下一个east或者到文件末尾的行,无论哪种情况先出现都可以。

     sed '/west/,/east/s/$/**VACA**/' datafile

       解释:对于在模式west到east范围内的行,行末尾将用**VACA**来取代。

  5> 多次编辑 -e 选项

     sed -e '1,3d' -e 's/Hemenway/Jones/' datafile

          -e选项允许多次编辑。不同的编辑顺序可能导致不同的结果。

          例如,如果两个命令都执行了替换,第一次替换可能影响第二次替换。

  6> 从文件中读取:r命令

     sed '/Suan/r newfile' datafile

       解释:r命令从newfile中读取内容,将内容输出到Suan的后面。从文件中插入

            如果datafile中Suan出现的次数不只一次,则分别放到Suan的后面。

  7> 写入文件:w命令

     sed -n '/north/w newfile' datafile

       解释:w命令把指定的行写入到一个文件。

            本例中所有的包含north的行写入到newfile中。

            等同于sed -n '/north/p' datafile >newfile

  8> 添加:a命令

     $ sed '/north/a\

      > ---->THE NORTH SALES DISTRICT HAS MOVED<-----' datafile


northwest NW Charles Main 3.0 .98 3 34

        ---->THE NORTH SALES DISTRICT HAS MOVED<-----

       解释:红颜色的内容是要输入的内容。a\命令后面跟要添加的内容。

            奇怪的是a\后面必须另起一行,再输入要添加的内容,否则会提示解析错误。

      另外,如果需要添加多行按照下面的方式写:

        $sed '/north/a\

         > hello \n\

         > world ' datefile

        也就是需要自行添加换行符

  9> 插入:i命令

    $ sed '/north/i\

      > ---->THE NORTH SALES DISTRICT HAS MOVED<-----' datafile


---->THE NORTH SALES DISTRICT HAS MOVED<-----

        northwest NW Charles Main 3.0 .98 3 34


解释:在符合模式的行前面插入内容。其余和a\命令相同。


10>下一个:n命令

     $ sed '/eastern/{n;s/AM/Archie/;}' datafile

 

     eastern EA TB Savage 4.4 .84 5 20

     northeast NE Archie Main Jr. 5.1 .94 3 13

     ……

      解释:如果在某一行里模式eastern被匹配,n命令使sed区的下一行,

           用该行代换模式空间,用Archie替换AM,打印并继续。


11>变换:y 命令

    sed '1,3y/abcdefghijklmnopqrst/ABCDEFGHIJKLMNOPQRST/' datafile

      解释:将对应字母进行转换。

  12>退出:q 命令

   sed '5q' datafile

      解释:在打印了5行之后,用q命令退出sed程序。

  13>保存和取得:h和G命令

   $ sed -e '/southeast/h' -e '$G' datafile

      解释:当sed 处理文件时,每行都存在模式空间(pattern space)的临时缓存中。除非行被禁止打印或删除,否则行将在处理完后被打印到屏幕,然后请模式空间并把下一输入行保存在那里等待处理。在这个例子中, 在找到模式之后,把它放在模式空间里,而且h命令复制它并把它存到另一个叫做保存缓存(holding buffer)中。第二个sed指令里,当读入最后一行($)时,G命令告诉sed从包存缓存中取得该行并放回模式空间缓存,添加到当前存在那里的行中。 本例子就是最后一行。

    $ sed -e '/WE/{h;d;}' -e '/CT/G' datafile

      解释:第一个命令h将找到了WE的行放到保存缓存中,然后删除该行;第二个命令/CT/G就是在找到了CT的行的后面加入保存缓存的内容。

 

   14>G和g的区别

      G命令在符合的条件行后面添加保存缓存中的内容;g命令用保存缓存中

   15>sed 命令的花括号{}的作用

      花括号{}中可以放入多个命令,每个命令后面要用分号;。

   16>保存和交换:h 和 x命令。

      $ sed -e '/Patricia/h' -e '/Margot/x' datafile

      解释:x命令将找到的行用保存缓存中的内容替换。

7. 用sed来编写命令表

    sed 命令表(script)是文件里的一个sed命令列表。用-f选项来引用一个命令表文件。编辑sed命令表有特殊要求:命令末尾不能有任何尾随的空白符或者文本。如果命令不是自成一行,就必须用分号结束

sed的选项

-e command, --expression=command

允许多台编辑。

-h, --help

打印帮助,并显示bug列表的地址。

-n, --quiet, --silent

取消默认输出。

-f, --filer=script-file

引导sed脚本文件名。

-V, --version

打印版本和版权信息。

元字符集


^

锚定行的开始 如:/^sed/匹配所有以sed开头的行。

$

锚定行的结束 如:/sed$/匹配所有以sed结尾的行。

.

匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。

*

匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。

[]

匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。

[^]

匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。

\(..\)

保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。

&

保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。

\<

锚定单词的开始,如:/\

\>

锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行。

x\{m\}

重复字符x,m次,如:/0\{5\}/匹配包含5个o的行。

x\{m,\}

重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。

x\{m,n\}

重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行。

阅读(801) | 评论(3) | 转发(0) |
0

上一篇:sed命令例解

下一篇:ARM汇编指令集

给主人留下些什么吧!~~

chinaunix网友2011-03-07 13:10:09

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com

chinaunix网友2011-03-07 13:09:55

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com

chinaunix网友2011-03-07 13:09:36

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com