• sed编辑器


    sed是一个流编辑器(stream editor),一个非交互式的行编辑器。在命令行中输入编辑命令、指定要处理的输入文件,然后在屏幕上查看输出。

    输入文件可以是指定的文件名,也可以是来自一个管道的输出。

    sed编辑器在运行的时候不必人工干涉,常被称作批编辑器,此特性允许在脚本中使用编辑命令。

    sed以按顺序逐行的方式工作:

    1.从输入读取一行数据存入临时缓冲区(称为模式空间,pattern space)

    2.按指定的sed编辑命令处理缓冲区中的内容

    3.把模式空间的内容送往标准输出,并将这行内容从模式空间中删除

    4.读取下面一行,重复上面的过程

    sed命令格式

    格式1: sed [OPTION] [-e] command1 [[-e command2] ... [-e commandn]] [input-file] ...

    可以指定多个编辑命令,sed对这些命令依次进行处理。若仅有一个命令,可省略-e。GNU sed可以使用“;”分割命令。

    格式2: sed [OPTION] -f script-file [input-file] ...

    执行脚本文件中的sed编辑命令。

    参数

    -n: sed在将下一行读入pattern space之前,自动输出pattern space中的内容。此选项关闭自动输出,是否输出由编辑命令控制。

    -r: 使用扩展正则表达式进行模式匹配。

    sed的编辑命令包括地址和操作两部分。地址指定sed要操作的行,操作指定要进行的处理。

    提示:

    1.通常使用单引号将整个操作命令括起来;

    2.若操作命令中包含Shell变量替换,应该使用双引号将整个操作命令括起来。

    注:地址和操作要连接在一起,之间不能有空格。

    sed命令的地址表示方法 

    分类    表示法            说明

    0                    省略地质部分,输入的每一行进行处理

    1      n             第n行 

    1      f~s            从f开始的,步长为s的所有行

    1      /regexp/         与正则表达式匹配的行

    2      m,n            从第m行至第n行

    2      m,+n           第m行以及其后的n行

    2      /regexp1/,/regexp2/   匹配regexp1的行至匹配regexp2的行

    2      /regexp/,n        匹配regexp的行至第n行

    2      n,/regexp/        第n行至regexp匹配的行

    sed支持的常用操作(sed支持25个操作)

    操作                    说明

    p                  打印

    l                   显示所有字符

    d                  删除

    =                  显示匹配行的行号

    s/regexp/replacement/       将指定行第一个匹配regexp替换为replacement

    s/regexp/replacement/g       将指定行的所有匹配regexp替换为replacement

    s/regexp/replacement/p       打印修改后的行

    s/regexp/replacement/gp      打印修改后的行

    s/regexp/replacement/w fname   将替换后的行写到文件fname中

    s/regexp/replacement/gw fname   将替换后的行写到文件fname中

    r fname               将另一个文件fname中的内容附加到指定行

    w fname               将当前模式空间的内容写到文件fname中

    n                  将指定行的下面一行读入模式空间

    q                  读取到指定行之后推出sed

    a\                  指定行下一行追加文本(主要用于sed脚本)

    i\                  指定行上一行追加文本(主要用于sed脚本)

    c\                  用新文本替换指定的行(主要用于sed脚本)

    地址部分后面使用!表示反向选择

    sed示例

    #将出现的每个Unix替换为Unix/Linux(&表示匹配到的字符串)

    $ sed -e 's/Unix/&\/Linux/g' file

    #将所有连续出现的c都压缩成单个c

    $ sed 's/cc*/c/g' file

    #删除行首的一个空格

    $ sed 's/ //' file

    #删除每行前导的连续"空白字符"

    $ sed 's/^[ \t]*//' file

    在“s/.../.../”前面加上地址表达式来提高速度

    #标准替换命令

    sed 's/foo/bar/g' file

    #速度更快

    sed '/foo/ s/foo/bar/g' file

    #简写形式

    sde '/foo/ s//bar/g' file

    若只替换第一次匹配foo的行,可以使用q短路后续行的执行

    sed '/foo/{s/foo/bar/;q}' file

  • 相关阅读:
    每日总结3.8
    Go中定时器实现原理及源码解析
    Go语言实现布谷鸟过滤器
    详解Go语言调度循环源码实现
    Go语言中时间轮的实现
    详解Go语言I/O多路复用netpoller模型
    详解Go中内存分配源码实现
    Go中由WaitGroup引发对内存对齐思考
    【分享】java精品实战教程
    nginx实战教程
  • 原文地址:https://www.cnblogs.com/custa/p/1867541.html
Copyright © 2020-2023  润新知