Chinaunix首页 | 论坛 | 博客
  • 博客访问: 364970
  • 博文数量: 83
  • 博客积分: 5322
  • 博客等级: 中校
  • 技术积分: 1057
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-11 11:27
个人简介

爱生活,爱阅读

文章分类

全部博文(83)

文章存档

2015年(1)

2013年(1)

2012年(80)

2011年(1)

分类: LINUX

2012-02-24 10:59:25

内容:

    1、选项与形式

    2、举例   

    sed是一种流编辑器,主要进行文本的编辑与处理,由于它不同于通常的交互式编辑器(vim、emacs),应用sed进行文本处理时需要通过行号或者模式指明需要编辑的文本。

    通常sed是从文件或者管道获取文本并拷贝至缓冲区进行处理,其本身并不处理源文件本身。实际上可通过重定向将结果进行保存。默认情况下,sed将处理结果输出到屏幕。

一、选项及形式等

     1、常见形式:

       sed [OPTION]... {script-only-if-no-other-script} [input-file]...

      应用sed对文本进行处理时候,通常以行为单位将文本文件读入模式空间(pattern space)。

      sed命令通常包含地址与编辑命令两部分;其中,地址是用于标识模式空间中的行是否匹配(匹配地址或者模式pattern)。如果匹配的话,则将编辑命令应用于模式空间,并不影响源文本文件内容。如果没有指定模式,则编辑命令应用于所有的模式空间。

         1.0、选项

    -n:该选项抑制默认的问题输出,仅输出通过p或者s///p命令标记的行;

    -e:指明后续项为sed脚本;在同一行中可以多次指定;

    -f script-file:指定sed脚本;对于较长的sed命令行形式,可以通过编辑对应的sed脚本,之后通过-f选项执行;

     -i[SUFFIX]:直接对源文件进行操作,如果指明备份文件名,则对源文件进行备份;即、将sed操作后的结果直接回写源文件。如果不提供备份扩展名,则不进行备份,否则,进行备份;

      -r:运用扩展的正则表达式;

     运用sed进行文本处理时候,如果没有通过-e或者-f指明sed脚本或者脚本文件,则sed会将第一个非option的项目作为脚本进行解析,并将剩余部分作为待处理的文本文件;若没有指明文本文件,则默认stdin做为处理输入;

         1.1、定位文本位置

             sed的非交互行决定通过sed对文本进行处理需要指明行号或者模式匹配的行,常见方式如下:

               'x':指定x行

             'x,y':x到y行

            'x,y!':不包含x,y两行

       '/pattern/':指定模式pattern所在行

     '/pattern/,x':在指定行x上并查找模式pattern

-----------几种情况:

    1.1.1、如果在文本中找到若干匹配pattern的行,输出的内容将包含:所有找到的符合pattern的行以及以下两种情况分析:a、如果第一个pattern所在的行号小于x,则同时输出第一个出现pattern的行到x之间(包括x)的所有行文本。b、如果x小于查找到的第一个pattern出现的行号,则不会有另外的输出(即,仅输出匹配到的行)

    1.1.2、如果在文本中没有找到匹配的pattern的行,则无任何输出;

      'x,/pattern/':在x行,以及出现模式pattern的行

-----------几种情况:

    1.1.3、从文本第x行之后开始查找,如果在文本中找到若干属于匹配pattern的行,则仅输出从x行到第一个匹配pattern的行,不输出其他匹配到的行;

    1.1.4、从文本第x行开始之后开始查找pattern,如果在文本中没有找到匹配的pattern的行,则输出从x行开始到文本结束位置的所有行;

   --------见后面举例   

           1.2、编辑命令:

        p :打印匹配行

        = :显示匹配的文件行号

       a \

         text:在定位行号后附加新文本信息

       i \

         text:在定位行号后插入新文本信息

       d :删除匹配定位行

      c \

         text:用新文本替换定位文本

     s :使用替换模式替换相应模式

     r :从另一个文件中读文本

     w :写文本到一个文件

    q :第一个模式匹配完成后退出或立即退出

    l :显示不可见控制字符对应的ASCII码

    {

   cmd1

   cmd2

} :在定位行执行的命令组

   g :进行全局替换

   y :在指定的范围按照原有的位置逐个进行字符替换

   n :延续到下一输入行;允许跨行的模式匹配语句

         1.3、正则表达式在sed中应用

        *:不同与shell中的*;*本身不匹配任何字符,仅在sed中用于标识匹配前面的零个或者多个字符;

        .:任意一个字符;

  【...】:括弧内的任意字符,如果以"^"则表明非括弧内的任意字符;

   pattern\{n,m\}:pattern的匹配次数在n与m之间;

   ^与$:分别用于pattern首部与尾部,分别标识以模式开头和结尾,例如:^pattern:以pattern开头pattern$:以模式pattern结尾;

      \:对字符进行转移;

    \( \):将通过\( 以及 \)之间的模式进行保存,并通过\进行转移引用;

      &:在s///命令中用于保存匹配到的模式;

     2、应用形式

        2.1、普通命令行下

  1. sed 【option】 'command' inputfile

----该命令允许在命令行指定一个编辑命令,并用单引号引起来;

        2.2、编辑sed脚本

  1. sed 【option】 -f sedfile inputfile

编辑sed脚本,通常第一行指定对应的命令解释器:

 #!/bin/sed -f

-----该命令指定一个包含sed命令文件;

     这里讲常用的选项以及形式给整理了一下,后面把上面的一些常用的场景举例验证。

 

 

阅读(657) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~