Sed学习笔记

  sed [-n] program [file-list]
  sed [-n] -f program-file [file-list] 1.2参数
  略 1.3 选项
  –file program-file    -f program-file    指定文件中sed程序可以命令行上使用多次
  –in-place[=suffix]    -i [suffix]      就地编辑文件,把输出送到原来的文件中,并备份原来文件加后缀suffix
  –help                概述sed的用法
  –quiet或–silent    -n        除非使用print指令或标志来指定否则不会将文本行复制到标准输出 1.4 编辑器基础
  sed程序由符合如下语法的一行或多行命令构成
  [address[address]] instruction [argument-list]
  address是可选的,如省略,那么sed将对输入中的所有行进行处理
  instruction是用于改变文本的指令address用来选定行instruction来处理
  argument-list中参数的数目和类型取决于指令instruction
  如果想把多个sed命令放在同一行,可以使用;   1.4.1 地址
    行号作为地址可以用来选择某一行,$表示输入中的最后一行
    正则表达式作为地址,可以选中与之相匹配字符串的行
    sed可以使用除反斜杠和换行符之外的任意字符来定界
    如指定一个地址sed将选择该地址匹配行
    如指定二个地址,第一个地下选择行首,第二个选择匹配这下一行
  
  1.4.2 指令
    d    删除指令:导致sed不输出被选择行,并且不继续完成对该行的后续处理过程,sed执行删除后,它将从输入读取下一行,并从program或program-file中的第1条命令开始执行     n    下一条指令:输出当前选择的行,然后从输入中读下一行,并从program或program-file中的下一条命令开始对新读入的行进行处理     a    追加指令,在当前选择的行后插入一行或多行文本,如果有两个地址,那将在选定的每一行之后添加文本,如没有地址,则加入到所有行后
    例:[address[address]] a
      text
      text
      …….
      text
    除最后一行外,所添加的文本每一行都必须以反斜杠结尾。sed总是会输出所添加的文本,而不论命令行中是否使用-n 甚至在删除被添加了文本的那一行后。被增加的文本仍会输出     i    插入指令:与append相同,只是将文本添加到选定行之前     c    修改指令:与append类似,不同的是他将选定改为新文本     p    打印指令:将选中行写入标准输出,写入立即发生,不会反映后续指令执行结果     w file  写指令:与print类似,它将输出写入到指定文件中     r file    读指令:读出指定文件的内容并添加到选定行之后     q    退出指令:使sed立即结束     s    sed中的替换指令与vim中的类似
        [address[address]]s/pattern/replacement-string/[g][p][w file]
        可以在replacement-string中使用&,代表当前匹配的字符串   1.4.3 控制结构
    !    使sed后面与其同一行的指令作用于没有被该命令选中的每一行
        例:3!d表示删除除第3行外所有行
          $!p 显示除最后一行外的所有行     {}    指令组:一旦使用一对花括号将一组指令括起来,则这组指令将作用于它前要的地址选定行,使用; 可将多条命令分开     分支指令 sed 的info中指出,Sed并不宜使用分支,建议用awk或perl
    :label  标识sed程序中一个位置,标号label作为跳转目标     b[label]  无条件转移到label处:如没有指定分支目标,则跳过当前行中剩下的指令并从输入中读取下一行     t[label]  如果最近从输入中读取的行使得substitnte指令匹配成功,则到label处, 如没有指定分支目标,则跳过当前行中剩下的指令并从输入中读取下一行   1.4.4 Pattern区与Hold区
    sed中有两个缓冲区,所有的命令都是工作在pattern区的,pattern区中保存着sed刚刚从输入中读取的行,作为临时缓冲区,Hold区可以在操作Pattern区中数据时来暂存数据,在将数据放入Hold之前,它是空的
    关于Pattern区与Hold区之间的数据传送
    g  将Hold区内容复制到Pattern区中,Pattern区中原来的内容丢失
    G  将一个换行符与Hold区中的内容追加到Pattern区中内容之后
    h  将Pattern中内容复制到Hold中,Hold中原来的内容将丢失
    H  将一个换行符与Pattern区中的内容追加到Hold区中内容之后
    x  将Pattern 区与Hold区做交换 1.5 示例
  例1: [root@redhat test]# cat new
    Line one.
    The second line.
    The third.
    This is line four.
    Five.
    This is the sixth sentence.
    This is line seven.
    Eighth and last.
    [root@redhat test]# sed '/line/ p' new
    Line one.
    The second line.
    The second line.
    The third.
    This is line four.
    This is line four.
    Five.
    This is the sixth sentence.
    This is line seven.
    This is line seven.
    Eighth and last.
    [root@redhat test]# sed -n '/line/ p' new
    The second line.
    This is line four.
    This is line seven.
    除非特别指出,否则sed将在标准输出上输出所有的行,无论它是否被选定。当在命令行中使用-n选项时,sed仅仅在标准输出上输出特] ]>

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注