从文件或者管道中读取一行处理一行,单行处理。把当前处理的行存储在临时缓冲区中,称为模式空间。处理完成后,将缓冲区的内容发送到屏幕,然后接着处理下一行,因为 sed 处理工作是一行一行处理的所以 sed 的性能很高,而 vim 打开很大的文件时就会很卡,因为 vim 是将所有数据统一加载到内存中,然后再打开,sed 就避免了这种情况。可以使用 -i 选项让其永久保存,也可以只使用模型空间。

    1. -n # 不输出模型空间到屏幕
    2. -f # 从文件中读取编辑脚本
    3. -e # 多个模式同时进行匹配
    4. -r,-E # 使用扩展正则表达式
    5. -i.bak # 再编辑时先将文件备份然后编辑原文件

    匹配地址格式

    1. 不给地址:对全文进行处理
    2. 单地址:
    3. #:指定的行,$:最后一行
    4. /pattern/:被此处模式能够匹配的每一行都会按照后来定义的操作进行处理
    5. 地址范围:
    6. #,# # 定义地址范围
    7. #,+# # #,继续往后多少行
    8. /pat1/,/pat2/ # 从第一个模式匹配到后一个模式
    9. #,/pat/ # 从 # 行匹配到 /pat/ 模式
    10. 步进:~
    11. 1~2 奇数行 1 每次增 2 ,匹配之后都是奇数行
    12. 2~2 偶数行 2 每次增 2 ,匹配之后都是偶数行

    命令:

    p        # 打印模式空间中的内容
    Ip        # 忽略大小写进行输出
    d        # 删除模式空间匹配的行
    a [\]text    # 在指定行后面追加文本,例:seq 5|sed '/3/atxt'
    i [\]text    # 在行前面插入文本,例:seq 5 | sed '/3/itxt'
    r file        # 读取指定文本的文本到存储空间匹配的行后,例:seq 5|sed '/3/r 1.txt'
    w file        # 输出模式空间中匹配的行输出到文件中保存,例:sed 'w 1.txt'
    =            # 为模式空中的行打印行号
    !            # 模式空间中匹配行取反处理
    

    修饰符:

    g        # 行内全局替换
    p        # 对内容进行输出
    w /PATH/FILE    # 将替换成功的行保存至文件中
    I,i        # 忽略大小写