SED(Stream EDitor)是一种流式编辑器,它可以根据输入的命令行的命令或者存储在命令文本文件中的命令处理数据。它每次从输入读取一行数据,将该数据与所提供的编辑器命令进行匹配,根据命令修改数据流中的数据。在流编辑器将全部命令和一行数据匹配完之后,它读取下一行数据,并重复上述过程。处理完数据流中的全部数据行之后,流编辑器停止。sed依赖模式空间运行,而模式空间是一个活动的缓冲区,它在sed编辑器处理命令时保留被检查的文本。但它不是存储文本的唯一可用空间。sed利用另一个称为保留空间的缓存区。在处理模式空间中的其他行时,可以使用保留空间暂时保留文本行。
        一、sed的基本知识
          1、sed的格式
                sed [options] 'script' input_file ...
                sed [options] -f script_file  input_file ...
                option参数允许自定义sed命令的行为
                script参数指定要应用于数据流的单个命令
                script_file 命令文本
          2、option选项
                -f: 将文本中指定的命令添加到处理输入时执行的命令中
                -i: 直接操作原文件
                -r: 使sed支持扩展正则表达式
                -e: 连接多个脚本

          3、script的应用
               sed 'ADDR1,ADDR2commond' input_file  
对input_file中指定范围文本执行command命令
                 sed '/PATTERN/command' input_file
                 sed '/PATTERN1/,/PATTERN2/command' input_file ...处理第一次被第一个模式匹配的行到第一次被第二个模式匹配的行
                 PATTERN参数指的是正则表达式模式。sed默认情况下支持基本的正则表达式
                 command:sed命令

          4、sed常用命令
                 d: 删除指定行
                 p: 打印命令;模式空间中的文本在处理之前,每一次都会先显示
                 =: 打印行号
                 a \: 在模式匹配到的行后面添加新内容
                  i \: 在模式匹配到的行前面添加新内容
                  \n: 实现添加多行
                  r: 从文本中读取
                  w: 把匹配的内容保存至文件中
                  n: 逐行读取,以覆盖的方式
                  N: 逐行读取,以追加的方式
                  h: 将模式中的内容复制到保留空间,覆盖的方式
                  H: 将模式中的内容复制到保留空间,追加的方式
                  g: 将保留空间内容复制到模式空间,覆盖的方式
                  G: 将保留空间内容复制到模式空间,追加的方式
                  b: 跳转, 略过符合模式的行
                  t  label:测试:前面的s命令执行成功就跳转到标记位值
                  x: 保留空间和模式空间对调
    
           5、常与sed连用的替换命令s
                 替换命令在替换多个文本行中的文本时效果不错。默认情况下仅替换各行中首次出现的文本。s的基本格式为:s/PATTERN/string/flag
                   PATTERN:匹配模式
                   string:替换的字符串
                   flag:替换标记
                常用的替换标记有:
                   g:表示用新文本替换现有文本的全部实例
                    i:忽略大小写
                   p:打印原始行的内容
              
        二、sed实例
                现有2个文本:data和test
                 cat  data
                      First line.
                     Second  line.
                     Third  line.
                     Fourth  line.
                 cat  test
                     He  likes his liker.
                     She loves her lover.
           1、删除命令
                 删除data中的第一行。
                   sed  '1d' data             
                   sed命令的总结_命令

                 删除data中的第3、4行。
                    sed '3,4d'  data

                   sed命令的总结_命令_02
                   或使用特殊文件结束符
                    sed '3,$d' data
                    sed命令的总结_sed命令_03

            2、打印命令
                 (1)打印行命令p多与n选项连用。在模式空间中的文本处理之前,每一次都会先显示
                   打印test文本中的第一行     
                         sed '/^H/p'  test
                         He  likes his liker.
                         He  likes his liker.
                         She loves her lover.
                        若只想显示匹配后的内容则只需与添加-n选项
                         sed  -n  '/^H/p'  test
                         He  likes his liker.
                   (2)打印行号
                        打印test文本中行号
                         sed '=' test
                         1
                         He  likes his liker.
                         2
                         She loves her lover.

                       使行号与文本在同一行

                     sed命令的总结_sed命令_04
             3、插入和附加命令
                   在test文本的第一行之前插入一句话:Welcome!
                      sed '1i\Welcome!' test  
                       sed命令的总结_sed命令_05

                   在test文本的第一行之后附加一句话:Welcome!
                      sed '1a\Welcome!' test  
                       sed命令的总结_sed_06

              4、文件应用
                    写文件:将data文件的前两行写到test文件中
                     sed  '1,2w test' data
                     cat  test
                       First line.
                       Second  line.
                   读文件: 读取test文件添加到data的第二行后面
                    sed '2r test' data
                     sed命令的总结_sed命令_07

         以上所述只是sed的基本用法,我们可以根据基本的用法自己编写高难度的sed命令。