windows sed 类似工具

Cheat Sheet

多行处理

范围表示

  • "3,4a hello"
  • "3,$a hello"

    • $ –> 到行尾

insert 前面插入

  • sed -e "3i hello"

append 后面追加

  • sed -e "3a hello"

delete 删除

  • sed -e "3,5d"

change 修改

  • sed -e "3c hello" –> 修改成 hello

print 打印输出

  • sed -n "3,4p" —> 与 -n 连用

单行编辑

简单替换

  • sed -e "s/root/my-name/"

替换次数

  • sed -e "s/root/my-name/3"

全局替换

  • sed -e "s/root/my-name/3g"

支持正则 regex

  • echo "home/demo.ZIP" | sed -e "s\.ZIP$/.zip/3g"
  • 注意

    • 有独有的正则语法

制定操作行

  • sed -e "3,10 s/root/my-name/g" —> 默认是所有行

数据搜索 和 操纵

搜索 + 输出

  • sed -n "/root/p" –> 注意 -n 和 p

搜索 + 删除

  • sed -e "/root/d"

搜索 + 替换

  • sed -e "s/root/my-name/g"

嵌套操作: 多重操作

  • nl etc/passwd | sed -n '/root/{s/bash/blueshell;p;q}'

    • 注意: "{}" ";" "q"

sed

  • stream editor 流 编辑器

格式

1
sed [-hnV][-e<script>][-f<script文件>][文本文件]
  • [文本文件]

    • 要处理的文件

选项

-e <script>

  • 要执行的脚本

-f <stript file>

  • 制定要执行的脚本所在的文件

-h

  • –help
  • 帮助

-n

  • –quiet
  • –silent
  • 静默模式

脚本程序

脚本动作

  1. i

    • insert 插入
    • 语法

      • 在给定行之前 插入文本

        1
        
          "3i hello" 在第三行之前插入 "hello"
  2. a

    • append 追加
    • 最佳内容
  3. 可以后跟 "\", 进行分割,这里 \ 无意义,不会被输出

    • 从第一个非空格的字符开始算起

      • "3a hello", "3a hello", "3a\hello"

        • 它们表示的都是一个意思:追加 "hello"
      • 语法

        • 有效添加文本:从非空格开始的文本

          1
          2
          3
          
            "3a hello"        # 添加 "hello" 到 第三行的后面, 注意:省略了空格
            "3ahello"         # 相同意思
            "3a\hello"        # 相同意思
  4. d

    • delete 删除
    • 语法

      1
      2
      3
      4
      5
      6
      
        2d      # 删除第二行
        2,3d    # 删除 2, 3 行
        3,$d    # 删除 第3行到结尾
        2-5d    # 删除 2 至 5 行 ----> Warning: 测试结果,语法错误
      
        2,5d    # 删除 2 至 5 行
  5. c

    • change 修改
    • 语法

      • 修改给定行 成为 设置的内容

        • 注意:使用 “,” 表示范围

          1
          2
          3
          4
          5
          
            "3c demo"     # 把 第三行 修改成 "demo"
          
            "3,5c demo"   # 把 3, 4, 5 行修改成 "demo", 注意: 这里是范围
          
            sed -e "3,5c demo" file.txt
  6. p

    • print 打印
    • 语法

      • 打印制定行的内容

        • 注意:

          • 使用 "," 表示范围
          • 与 -n 选项连用

            1
            2
            
              sed -n "4p" file.txt    # 打印第四行
              sed -n "4,7p" file.txt  # 打印 4~7 行, 4, 5, 6, 7
  7. s

    • substitue 替换
    • 语法

      • 替换搜索到的内容

        1
        2
        3
        
          "s/<to-replace>/<new-content>/g"  # * 全局替换
        
          nl /etc/passwd | sed "s/bash/hello-my-shell/g"
        • 注意:支持 regex

          1
          2
          
            # 删除 ^.*addr:
            /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'
    • 作用对象

      • 留空

        • eg: "s/root/my-root/"
        • 默认行为,全部替换
      • /1, /2

        • 数字形式
        • 只替换第几次出现
        • eg: "s/root/my-root/2"
      • /g

        • 替换到最后
      • 范围

        • eg: "s/root/my-root/2g"
        • 解说:从第二次到最后
  8. 指定 行数

    1
    2
    3
    4
    
      # 只替换第三行
      sed '3 s/unix/linux/' geekfile.txt
      sed '3,5 s/unix/linux/' geekfile.txt  # 3~5
      sed '3,$ s/unix/linux/' geekfile.txt  # 3~结尾
    • 注意

      • 使用 "," 表示范围
    • 和 p 操作连用

      1
      2
      3
      
        sed "s/root/my-name/p"    # 打印两次修改的行
      
        sed -n "s/root/my-name/p"  # 只输出 修改的行
  9. q

    • 退出 多个命令操作模式

数据搜寻 和 结果操作

  • 语法

    • 格式

      1
      
        "/pattern/<maniulate-action>"  # 格式
  • 搜寻并打印

    • 格式

      1
      
       cat /etc/passwd | sed -n "/root/p"   # 搜索并打印包含 root 的行
      • 注意: 和 -n 连用
  • 搜寻并删除

    1
    2
    
      "/root/d"
      nl /etc/passwd | sed  '/root/d'
  • 搜寻并替换

    1
    
      nl /etc/passwd | sed 's/root/my-shell/'
  • 多个命令操作

    1
    2
    3
    
      nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}'
      # result:
      # 1  root:x:0:0:root:/root:/bin/blueshell
    • 注意

      • 使用 ";" 分割操作
      • "q"
    • 退出