Linux文本处理工具(sed)

1.sed介绍

  stream editor,行编辑器

  sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕,然后读入下行,执行下一个循环。如果没有诸如‘D’的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非使用重定向输出功能

  功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等

2.sed用法  

  用法:sed [option]... 'scripts' inputfile

  常用选项

    -n:不输出模式空间内容到屏幕上,即不自动打印

    -e:多点编辑

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

    -f:/PATH/SCRIPT_FILE:从指定文件中读取编辑脚本

    -i.bak:备份文件并原处编辑(先生成一个.bak的备份文件,然后再进行编辑)

  scripts

    '地址+命令'

  地址定界:

    (1):不给地址:对全文进行处理

    (2):单地址

      #:指定的行,$:最后一行

      /pattern/:被此处模式所能匹配到的每一行

    (3):地址范围

      #,#

      #,+#

      /par1/,pat2/:

      #,/pat1/

    (4):步进

      1~2:奇数行

      2~2:偶数行

  编辑命令

    d:删除模式空间匹配的行,并启用下一轮循环

    p:打印当前模式空间内容,追加到默认输出之后

    =:为模式空间中的行打印行号

    !:模式空间中匹配行取反处理

    a[]text:在指定行后面追加文本

          支持使用 实现多行追加

    i[]text:在行前面插入文本

    c[]text:替换行为单行或多行文本

    w /path/somefile:保存模式匹配的行至指定文件

    r /path/somefile:读取指定文件的文本至模式空间中,放到匹配到的行后

    s///:查找替换,支持使用其它分隔符,s@@@,s###

      替换标记: 

        g:行内全局替换

        p:显示替换成功的行

        w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中

sed示例:

  取ip地址:ifconfig eno16777736|sed -r '2!d;s@.*inet (.*)net.*@1@'

  sed '2p' /etc/passwd

  sed -n '2p' /etc/passwd

  sed -n '1,4p' /etc/passwd

  sed -n '/root/p' /etc/passwd

  sed -n '2,/root/p' /etc/passwd

  sed -n '/^$/=' file 

  sed -n -e '/^$/p' -e '/^$/=' file

  sed '/root/asuperman' /etc/passwd

  sed '/root/isuperman' /etc/passwd

  sed '/root/csuperman' /etc/passwd

  sed '/^$/d' file

  sed '1,10d' file

  nl /etc/passwd|sed '2,5d'

  nl /etc/passwd|sed '2a ea'

  sed 's/test/mytest/g' sed.txt

  sed -n 's/root/&superman/p' /etc/passwd

  sed -n 's/root/superman&/p' /etc/passwd

  sed -i.bak 's/test/mytest/g' sed.txt

3.sed高级用法

原文地址:https://www.cnblogs.com/hjmLinux/p/11867586.html