sed扩展

  • 打印文件中特定的某行到某行之间的内容,//,//两行之间。
    [root@aminglinux-02 sed]# sed -n '/\[abcfd\]/,/\[rty\]/p' 1.txt 
    [abcfd]
    123
    324
    444
    [rty]
  • sed的大小写转换
    • 把每个单词的第一个小写字母变大写,\b是边界符开头第一个,\u是将下一个字符变大写
      [root@aminglinux-02 sed]# sed 's/\b[a-z]/\u&/g' 1.txt 
      Ert
      Fff
      **
      [Abcfd]
      123
      324
      444
      [Rty]
      **
      Fgfgf
    • 把所有小写变大写
      [root@aminglinux-02 sed]# sed 's/[a-z]/\u&/g' 1.txt 
      ERT
      FFF
      **
      [ABCFD]
      123
      324
      444
      [RTY]
      **
      FGFGF
    • 大写变小写
      [root@aminglinux-02 sed]# sed 's/[A-Z]/\l&/g' 1.txt 
      ddd
      fff
      **
      [fffcfd]
      123
      324
      444
      [rty]
      **
      fgfgf
  • sed在文件中某一行最后添加一个数字
    [root@aminglinux-02 sed]# sed -r 's/(^f.*)/& 12/g' 1.txt 
    fDDDdada 12
    fFFdada 12
    **
    [FFFcfd]
    1dadajk23
    324dada
    444iuiquei
    [rty]
    **
    fgfgf 12
  • sed删除某关键字的下一行到最后一行
    [root@aminglinux-02 sed]# sed '/r/{p;:a;N;$!ba;d}' 1.txt 
    fDDDdada
    fFFdada
    **
    [FFFcfd]
    1dadajk23
    324dada
    444iuiquei
    [rty]
    定义一个标签a,匹配c,然后N把下一行加到模式空间里,匹配最后一行时,才退出标签循环,然后命令d,把这个模式空间里的内容全部清除。
    if 匹配"c"
    :a
    追加下一行
    if 不匹配"$"
    goto a
    最后退出循环,d命令删除。
  • 如何使用sed打印1到100行包含某个字符串的行
    [root@aminglinux-02 sed]# sed -n '1,100{/da/p}' 1.txt 
    fDDDdada
    fFFdada
    1dadajk23
    324dada