首页 > 代码库 > Sed基础

Sed基础

Sed(Stream EDitor):流编辑器

工作原理:

  将文件中的文本逐行取出,在内存中处理,而不是在源文件中处理;sed的加工车间有两个:pattern space和hold space;sed会根据给定的pattern去匹配每行文本,不管匹配成功或失败,默认都会将pattern space中的内容输出至标准输出,如果匹配成功再执行用户给定的编辑命令。

命令格式:

  sed [OPTIONS] ... ‘script‘ file...

  其中script是地址定界编辑命令的整体

  常用OPTIONS:

    -n:不输出pattern space中的内容至标准输出

    -e script,--expression=script:多点编辑

/*示例*/
sed  -e ‘/^[A]/p‘ -e ‘/^[A]/d‘ test.txt

    -f /PATH/TO/SOME/SED_SCRIPT_FILE:每行一个编辑命令

    -r:支持使用扩展正则表达式(不加则使用基本正则表达式)

    -i[SUFFIX],--in-place[=SUFFIX]:直接编辑源文件

/*示例*/
sed -i ‘/^[h]/d‘ test.txt

  地址定界:

    (1)空地址[什么也不写]:匹配全文

    (2)单地址:

      #:指定行

      /pattern/:被模式匹配到的每一行

/*示例*/
sed -n ‘2p‘ test.txt

    (3)地址范围:

      #,#:第#行到第#行,如1,5

      #,+#:如1,+2,从第一行开始,到第三行

      #,/pattern/:从#行到被pattern匹配到的行之间的行

      /pattern1/,/pattern2/

      $:最后一行

    (4)步进:~

      1~2:所有奇数行

      2~2:所有偶数行

  编辑命令:    

    d:删除模式空间(pettern space)中的内容

    p:显示模式空间中的内容

    a \test:在行后面追加文本‘test’,支持使用\n实现多行追加

    i \test:在行前面插入文本‘test’,支持使用\n实现多行插入

    c \test:把匹配到的行替换为此处指定的test

    w /PATH/TO/SOMEFILE:保存模式空间中匹配到的行至指定文件中

    r /PATH/FROM/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行之后,实现文件合并

    =:为模式匹配到的行打印上行号

    :条件取反,格式为:地址定界!编辑命令

    s///:查找替换,其分隔符可自行定义,常用有s###,s@@@等;

      替换标记:

        g:全局替换

        w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中

        p:显示替换成功的行;

/*示例*/
echo "/var/log/message" | sed ‘s@[^/]\+/\?$@@‘

  高级编辑命令

    h:把模式空间中的内容覆盖至hold space(保持空间)中

    H:把模式空间中的内容追加至hold space(保持空间)中

    g:把保持空间中的内容覆盖至模式空间中

    G:把保存空间中的内容追加至模式空间中

    x:把两个空间中的内容互换;

    n:覆盖读取匹配到的行的下一行至模式空间中;

    N:追加读取匹配到的行的下一行至模式空间中;

    d:删除模式空间中的行;

    D:删除多行模式空间中的所有行;

Sed基础