sed的三种用法
1.shell命令行输入命令
 格式:sed [选项] ’sed命令‘ 输入文件

2.将sed命令出入脚本文件后,sed命令调用
格式: sed [选项] -f sed脚本文件 输入文件

3.将sed命令插入脚本文件后,三种脚本文件可执行,直接执行脚本文件

格式:./sed脚本文件 输入文件

sed选项
  -n  不显示所有行到屏幕(标准输出)
  -e  表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑      命令给sed,-e选项可以省略
  -f  表示正在调用sed脚本文件


sed的两种定位文本方式
1.使用行号,指定一行,或指定行号范围
2.使用正则表达式

定位文本
x   x为指定行号
x,y 指定从x到y的行号范围
/pattern/   出现包含模式的行
/pattern/pattern/  查询包含两个模式的行
/pattern/,x      从x号到与pattern的匹配行之间的行
x,y!       查询不包括x和y行号的行


sed编辑命令
  p   打印匹配行
  =   打印文件行号
  a\  在定位行号之后追加文本信息
  i\  在定位行号之前插入文本信息
  d   删除定位行
  c\  用新文本替换相应模式
  r   从另一个文件中读文件
  w   将文本保存到一个文件
  y   变换字符
  q   第一个模式匹配完成后退出
  l   显示与八进制ASCII码等价的控制字符
  {}  在定位行执行的命令组
  n   地区下一个输入行,用下一个命令处理新的行
  h   将模式缓冲区的内容复制到保持缓冲区
  H   将模式缓冲区的文本追加到保持缓冲区
  x   互换模式缓冲区和保持缓冲区的内容
  g   将保持缓冲区的内容复制到模式缓冲区
  G   将保持缓冲区的内容追加到模式缓冲区


*** 一、文本选项
1.sed命令的-n选项   --不显示所有行到屏幕(标准输出)
例子
  sed -n '1p' input  只显示文本第一行
  sed '1p' input     不止打印第一行,还打印文本的全部内容
 
  sed命令打印范围行
例子
  sed -n ’3,6p' input  打印文本的3到6行

  打印匹配模式 -n ‘/ca/p' input  打印文本中含有ca的行

2.sed命令的-e选项    --使用多个编辑命令
例子
    sed -n '/ca/=' input      打印含有ca的行号

例子
    sed -n -e '/ca/p' -e '/ca/=' input 打印行有ca的行及行号

 注意:不支持同时带多个编辑命令的用法
   如 sed -n '/ca/p=' input

3.sed命令的-f选项
  sed ’指定地址a\text' 输入文件
例子:
    sed '/file:/a\i love you.' input
      在文本input中含有file:的行后面另起一行添加i love you(作为一行)

脚本执行追加   --在匹配行的后面插入一行内容
   touch zhuijia.sed
   #!/bin/sed -f   #调用sed脚本
    /file:/a\      # a\表示此处换行添加文本
 #所添加的文本内容
   l like you.\    #"\"符号表示换行
   l love you.

 执行脚本
   给执行权限
  ./zhuijia.sed input


+++++++++++++++++++++++++++++++++++++++++++++++

***二、文本定位

1.匹配元字符
  例子
   sed -n '/\./p' input  匹配文本中含有”.“的行

2.使用元字符进行匹配
  例子
   sed -n '$p' input  匹配文本最后一行
   sed -n '/.*bus/p' input  匹配包含bus结尾的任意字符串

3.!符号
  例子
  sed -n '2,10!p' input  匹配不再2到十行的所有行
 
4.使用行号与关键字匹配限定行范围
 例子
 sed -n '/ca/,$p' input 打印与ca的匹配行到最后一行
 sed -n '3,/ca/p' input 打印第三行到ca的匹配行

+++++++++++++++++++++++++++++++++++++++++++

***三、sed编辑命令
 1.插入文本    --在匹配行的前面插入一行内容
   格式:sed '指定地址i\text' 输入文件
  例子
  sed脚本
  #!/bin/sed -f
   /file:/i\     #i\表示此处换行插入文本
    we insert a new line.  #插入的文本内容
作用:在file:所在的行的上一行插入 we insert a new line.这一      行内容

 2.修改文本   --匹配的文本行用新文本替代
   格式:‘指定地址c\text' 输入文件
   例子
   #!/bin/sed -f
     /file:/c\       #c\表示此处换行修改文本
    We modify this line    #修改的文本内容
作用:   将file:所在的文本行替换成  We modify this line文本         行

 3.删除文本   --删除指定行或指定行范围
   格式:删除地址d
   例子
   sed '1d' input  删除文本的第一行
   sed '$d' input  删除文本的最后一行
   sed '1,10d' input  删除文本的1到10行
   sed '/[Cc][Ee]/d'  删除含有不区分大小写的关键字ce的所有行
  
 4.替换文本
   格式:s/被替换的字符串/新字符串/[替换选项]
    替换选项
    g  表示替换文本中所有出现被替换字符串之处
    p   与-n选项结合,至打印替换行
    w文件名  表示将输出定向到一个文件

  1>p选项
   命令格式:sed -n 's/被替换的字符串/新字符串/Np' 输入文件
    没有-n  显示替换了字符串后的文本
    没有p   不显示任何内容
    都有     只显示替换了字符串的行
     Np     替换每行的第N次匹配
   例子   
   sed 's/ca/ce/p'    input   将文本中含有ca的行中的第一个ca                              替换成ce,并将替换后的文本显示
   sed -n 's/ca/ce/' input    将文本中含有ca 的行中的第一个                              ca 替换成ce,不显示文本
   sed -n 's/ca/ce/p' input   将文本中含有ca的行中第一个ca替                              换成ce,只显示替换的行
   sed -n 's/ca/ce/2p input   将文本中国含有ca的行中的第二个                              ca替换成ce,只显示替换的行

  2>g选项
   命令格式:sed -n 's/被替换的字符串/新字符串/g' 输入文件
     没有g   只替换每行第一个可以替换的字符串
      有g     替换每行所有可以替换的字符串

    例子
    sed -n 's/ca/ce/g' 将文本中含 有ca的行的所有ca替换成ce,                       只显示替换的行

   3>w选项
     命令格式:se -n '被替换的字符串/新字符串/w output' input
 
   例子
   sed -n 's/ca/ce/w output' input  将文本中的ca替换成ce,并将结果写                                     入output文件

  4>文本替换结合&    --将被替换的字符串保存到&中
   例子
    sed  -n '/ca/(&)/p' input  ==sed -n '/ca/(ca)/p'

  5.写入一个新文件
    命令格式:指定地址 w 文件名
    例子
    sed -n '1,5 w output' input 将文本input中的1到5行写入到output中
    sed -n '/ca/w output' input 将文本input中匹配ca的行写入到output中
   
  6.从文件中读入文本  ---将其他文件中的文本读入并附加到指定地址之后
    格式:指定地址 r 文件名
    例子
     sed '/ca/r otherfile' input  将otherfile文件中的所有文本插入到                                    input文本中匹配ca的文本行后面


7.退出命令
   格式:指定地址 q
   例子
    sed '5 q' input 打印文本前5行,然后退出
   
    sed -n '/.r.*/p' input 查找”所有的“任意字符后跟r字符再跟0个或多                            个任意字符

     sed -n '/.r.*/q'      查找”第一个“任意字符后跟r字符再跟0个或多                           个任意字符,然后退出查找

8.变换命令
  格式:sed 'y/被变换的字符序列/变换的字符序列/' 输入文件
   例子:
   sed ‘y/12345/abcde/' input 将文本中的12345一一对应的替换为abcde
   注意:被变换字符序列和变换字符序列必须等长

9.显示控制字符
   例子
    sed -n '1,$1' input  显示文本中的所有控制字符(如:shift,退格键等)

10.在等位行执行命令组
  例子
等价命令  sed -n -e '/ca/p' -e '/ca/=' input
         sed -n '/ca/{p;=}' input

      sed '/ca/{s/i/I/g;s/le/99/;}' input 匹配ca的文本行中将所有i替                                      换为I,匹配行的第一个le替换为99

+++++++++++++++++++++++++++++++++++++++++++++++++++

***四、高级编辑
 1.处理匹配行的下一行
   例子
   sed '/ca/{n;s/11/99;}' input  将文本中ca的匹配行的下一行中的ll替换                                   为99

 2.sed缓冲区的处理??????????????????????????
   sed的两种缓冲区
        模式缓冲区
        保持缓冲区

   例子
   sed -e '/ca/h' -e 'ce/x' -e '$G' input


3.利用分号分隔多个编辑命令
  格式:sed '编辑命令1;编辑命令2;......'输入文件
  例子
   sed 's/ca/ce; s/csa/ce' input 将文本中ca替换为ce,csa替换为ce
   bourne shell命令行中
   sed '
   >s/ca/ce
   >s/csa/ce
   ....
   >$d' input