• Linux文本处理三剑客之sed详解


               Linux文本处理三剑客之sed详解

                                      作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

    一.sed概述 

    1>.sed工具简介

      什么是sed:
        sed是Stream Editor的简写名称,它是流或者批量非交互式(non-intercative)的编辑工具。
    
      sed的工作原理:
        sed是一种流编辑器(Stream EDitor),它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。 如果没有使诸如"D"的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
    
      sed功能:
        主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等 
    
      博主推荐阅读: 
        http://www.gnu.org/software/sed/manual/sed.html

    2>.sed常用选项

    [root@node101.yinzhengjie.org.cn ~]# sed --help
    Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...
    
      -n, --quiet, --silent
                     suppress automatic printing of pattern space
      -e script, --expression=script
                     add the script to the commands to be executed
      -f script-file, --file=script-file
                     add the contents of script-file to the commands to be executed
      --follow-symlinks
                     follow symlinks when processing in place
      -i[SUFFIX], --in-place[=SUFFIX]
                     edit files in place (makes backup if SUFFIX supplied)
      -c, --copy
                     use copy instead of rename when shuffling files in -i mode
      -b, --binary
                     does nothing; for compatibility with WIN32/CYGWIN/MSDOS/EMX (
                     open files in binary mode (CR+LFs are not treated specially))
      -l N, --line-length=N
                     specify the desired line-wrap length for the `l' command
      --posix
                     disable all GNU extensions.
      -r, --regexp-extended
                     use extended regular expressions in the script.
      -s, --separate
                     consider files as separate rather than as a single continuous
                     long stream.
      -u, --unbuffered
                     load minimal amounts of data from the input files and flush
                     the output buffers more often
      -z, --null-data
                     separate lines by NUL characters
      --help
                     display this help and exit
      --version
                     output version information and exit
    
    If no -e, --expression, -f, or --file option is given, then the first
    non-option argument is taken as the sed script to interpret.  All
    remaining arguments are names of input files; if no input files are
    specified, then the standard input is read.
    
    GNU sed home page: <http://www.gnu.org/software/sed/>.
    General help using GNU software: <http://www.gnu.org/gethelp/>.
    E-mail bug reports to: <bug-sed@gnu.org>.
    Be sure to include the word ``sed'' somewhere in the ``Subject:'' field.
    [root@node101.yinzhengjie.org.cn ~]# 

    3>.sed常用的编辑命令 

      "d":
          删除模式空间匹配的行,并立即启用下一轮循环
    
      "p":
          打印当前模式空间内容,追加到默认输出之后
    
  
      "a []text":
          在指定行后面追加文本,支持使用
    实现多行追加
    

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

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

      "w /path/file": 
          保存模式匹配的行至指定文件
    
      "r /path/file":
        读取指定文件的文本至模式空间中匹配到的行后
    
      "=":
          为模式空间中的行打印行号
    
      "
!": 
        模式空间中匹配行取反处理 
    
      "s///":
        查找替换,也支持使用其它分隔符,如:"s@@@""s###" 
        "s///"替换标记如下所示:
          "g": 
            行内全局替换       "p":
            显示替换成功的行       "
    w /PATH/FILE":
            将替换成功的行保存至文件中

    二.sed工具常用选项介绍

    1>.使用编辑命令"d"(删除模式空间匹配的行,并立即启用下一轮循环)

    [root@node101.yinzhengjie.org.cn ~]# seq 10
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 10 | sed '3d'          #删除第三行的默认输出
    1
    2
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]#
    [root@node101.yinzhengjie.org.cn ~]# seq 10 | sed '3d'               #删除第三行的默认输出
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10 | sed '1~2d'            #删除奇数行,即会打印偶数行。
    2
    4
    6
    8
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10 | sed '1~2d'            #删除奇数行,即会打印偶数行。
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10 | sed '2~2d'            #删除偶数行,即会打印奇数行。
    1
    3
    5
    7
    9
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10 | sed '2~2d'            #删除偶数行,即会打印奇数行。

    2>.使用编辑命令"p"(打印当前模式空间内容,追加到默认输出之后)结和"-n"选项(不输出模式空间内容到屏幕,即不自动打印) 案例

    [root@node101.yinzhengjie.org.cn ~]# ll
    total 0
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cp /etc/passwd ./      #将虚拟机的系统用户管理文件拷贝到root用户的加目录中
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll
    total 4
    -rw-r--r--. 1 root root 897 Jan  5 23:46 passwd
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cat passwd           #我们使用cat命令查看系统用户管理文件。
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cp /etc/passwd ./              #将虚拟机的系统用户管理文件拷贝到root用户的加目录中
    [root@node101.yinzhengjie.org.cn ~]# sed 'p' passwd         #不难发现每行的内容都被重复打印到当前终端了,为什么会这样呢?自习回想一下sed的工作原理其实不难想通。
    root:x:0:0:root:/root:/bin/bash
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed 'p' passwd                #不难发现每行的内容都被重复打印到当前终端了,为什么会这样呢?自习回想一下sed的工作原理其实不难想通。
    [root@node101.yinzhengjie.org.cn ~]# sed -n 'p' passwd          #使用"-n"选项可以不输出模式空间内容到屏幕,即不自动打印,明人不说暗话,这功能并不能显得sed功能有多强大,因为咱们直接使用cat命令也可以达到相同的效果。
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n 'p' passwd               #使用"-n"选项可以不输出模式空间内容到屏幕,即不自动打印,明人不说暗话,这功能并不能显得sed功能有多强大,因为咱们直接使用cat命令也可以达到相同的效果。
    [root@node101.yinzhengjie.org.cn ~]# cat passwd 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cat passwd | wc -l
    20
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '20p' passwd             #只打印文本中的第20行。
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '20p' passwd              #只打印文本中的第20行。
    [root@node101.yinzhengjie.org.cn ~]# seq 50 2 80
    50
    52
    54
    56
    58
    60
    62
    64
    66
    68
    70
    72
    74
    76
    78
    80
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 50 2 80 | sed -n '9p'           #从管道输出的内容只过滤出第9行内容。
    66
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 50 2 80 | sed -n '9p'           #从管道输出的内容只过滤出第9行内容。 
    [root@node101.yinzhengjie.org.cn ~]# seq 50 2 80 
    50
    52
    54
    56
    58
    60
    62
    64
    66
    68
    70
    72
    74
    76
    78
    80
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 50 2 80 | sed -n '$p'         #打印最后一行
    80
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 50 2 80 | tail -1
    80
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 50 2 80 | sed -n '$p'         #打印最后一行
    [root@node101.yinzhengjie.org.cn ~]# cat -n passwd 
         1  root:x:0:0:root:/root:/bin/bash
         2  bin:x:1:1:bin:/bin:/sbin/nologin
         3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
         4  adm:x:3:4:adm:/var/adm:/sbin/nologin
         5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
         6  sync:x:5:0:sync:/sbin:/bin/sync
         7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
         8  halt:x:7:0:halt:/sbin:/sbin/halt
         9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
        10  operator:x:11:0:operator:/root:/sbin/nologin
        11  games:x:12:100:games:/usr/games:/sbin/nologin
        12  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
        13  nobody:x:99:99:Nobody:/:/sbin/nologin
        14  systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
        15  dbus:x:81:81:System message bus:/:/sbin/nologin
        16  polkitd:x:999:998:User for polkitd:/:/sbin/nologin
        17  sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
        18  postfix:x:89:89::/var/spool/postfix:/sbin/nologin
        19  chrony:x:998:996::/var/lib/chrony:/sbin/nologin
        20  jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '18,20p' passwd                       #打印第18-20行。
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '18,20p' passwd            #打印第18-20行。
    [root@node101.yinzhengjie.org.cn ~]# seq 10
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 10 | sed -n '5,+3p'        #打印第五行及第五行的后三行。
    5
    6
    7
    8
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 10 | sed -n '5,+3p'            #打印第五行及第五行的后三行。
    [root@node101.yinzhengjie.org.cn ~]# cat passwd             
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '/^root/p' passwd                    #打印以root开头的行,很显然,sed是支持正则表达式的
    root:x:0:0:root:/root:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '/bash/p' passwd                  #打印包含bash的行
    root:x:0:0:root:/root:/bin/bash
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '/^root/p' passwd           #打印以root开头的行,很显然,sed是支持正则表达式的
    [root@node101.yinzhengjie.org.cn ~]# cat passwd                         
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '/root/,/operator/p' passwd           #打印root到operator的行。
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '/root/,/operator/p' passwd     #打印包含root的行到包含operator的行。
    [root@node101.yinzhengjie.org.cn ~]# cat -n passwd 
         1  root:x:0:0:root:/root:/bin/bash
         2  bin:x:1:1:bin:/bin:/sbin/nologin
         3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
         4  adm:x:3:4:adm:/var/adm:/sbin/nologin
         5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
         6  sync:x:5:0:sync:/sbin:/bin/sync
         7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
         8  halt:x:7:0:halt:/sbin:/sbin/halt
         9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
        10  operator:x:11:0:operator:/root:/sbin/nologin
        11  games:x:12:100:games:/usr/games:/sbin/nologin
        12  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
        13  nobody:x:99:99:Nobody:/:/sbin/nologin
        14  systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
        15  dbus:x:81:81:System message bus:/:/sbin/nologin
        16  polkitd:x:999:998:User for polkitd:/:/sbin/nologin
        17  sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
        18  postfix:x:89:89::/var/spool/postfix:/sbin/nologin
        19  chrony:x:998:996::/var/lib/chrony:/sbin/nologin
        20  jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '1~2p' passwd               #只打印奇数行。
    root:x:0:0:root:/root:/bin/bash
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '1~2p' passwd               #只打印奇数行。
    [root@node101.yinzhengjie.org.cn ~]# cat -n passwd        
         1  root:x:0:0:root:/root:/bin/bash
         2  bin:x:1:1:bin:/bin:/sbin/nologin
         3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
         4  adm:x:3:4:adm:/var/adm:/sbin/nologin
         5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
         6  sync:x:5:0:sync:/sbin:/bin/sync
         7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
         8  halt:x:7:0:halt:/sbin:/sbin/halt
         9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
        10  operator:x:11:0:operator:/root:/sbin/nologin
        11  games:x:12:100:games:/usr/games:/sbin/nologin
        12  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
        13  nobody:x:99:99:Nobody:/:/sbin/nologin
        14  systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
        15  dbus:x:81:81:System message bus:/:/sbin/nologin
        16  polkitd:x:999:998:User for polkitd:/:/sbin/nologin
        17  sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
        18  postfix:x:89:89::/var/spool/postfix:/sbin/nologin
        19  chrony:x:998:996::/var/lib/chrony:/sbin/nologin
        20  jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '2~2p' passwd              #只打印偶数行
    bin:x:1:1:bin:/bin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    halt:x:7:0:halt:/sbin:/sbin/halt
    operator:x:11:0:operator:/root:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '2~2p' passwd               #只打印偶数行

    3>.使用编辑命令"a"(在指定行后面追加文本,支持使用 实现多行追加)

    [root@node101.yinzhengjie.org.cn ~]# seq 1 10
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10 | sed '3aHello'        #在第三行后追加一行"Hello"内容
    1
    2
    3
    Hello
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10 | sed '3aHello'              #在第三行后追加一行"Hello"内容
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10 | sed '3aHello
    2019
    World'      #在第三行后可以追加多行内容,需要使用Linux默认的换行符("
    ")隔开
    1
    2
    3
    Hello
    2019
    World
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10 | sed '3aHello 2019 World'      #在第三行后可以追加多行内容,需要使用Linux默认的换行符(" ")隔开
    [root@node101.yinzhengjie.org.cn ~]# cat passwd 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed '/^r/aHello-World' passwd           #在以"r"字母开头的行添加一行"Hello-World"的字符。
    root:x:0:0:root:/root:/bin/bash
    Hello-World
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed '/^r/aHello-World' passwd           #在以"r"字母开头的行添加一行"Hello-World"的字符。

    4>.使用编辑命令"i"(在行前面插入文本)

    [root@node101.yinzhengjie.org.cn ~]# seq 1 10
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10 | sed '3i Hello-World'             #在第三行前添加一行内容
    1
    2
    Hello-World
    3
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10 | sed '3i Hello-World'           #在第三行前添加一行内容
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10 | sed '3i Hello
    2019
    World'        #在第三行前面追加多行内容,使用Linux默认的换行符("
    ")分割即可。
    1
    2
    Hello
    2019
    World
    3
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10 | sed '3i Hello 2019 World'      #在第三行前面追加多行内容,使用Linux默认的换行符(" ")分割即可。

    5>.使用编辑命令"c"(替换行为单行或多行文本) 

    [root@node101.yinzhengjie.org.cn ~]# seq 1 10
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10 | sed '3c Hello-World'        #将第三行的内容使用"Hello-World"字符替换掉
    1
    2
    Hello-World
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10 | sed '3c Hello-World'          #将第三行的内容使用"Hello-World"字符替换掉
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10 | sed '3c Hello
    2019
    World'          #将第三行的内容使用多行替换掉,多行之间使用Linux默认的换行符("
    ")分割
    1
    2
    Hello
    2019
    World
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10 | sed '3c Hello 2019 World'      #将第三行的内容使用多行替换掉,多行之间使用Linux默认的换行符(" ")分割

    6>.使用编辑命令"a"(在指定行后面追加文本,支持使用 实现多行追加)结和"-i"选项(修改源文件)案例 

    [root@node101.yinzhengjie.org.cn ~]# cat passwd 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed '/^r/a Hello-World' passwd             #在以"r"开头的行后追加一行"Hello-World"字符并将结果输出到控制台,但是此操作并不会修改源文件内容哟~
    root:x:0:0:root:/root:/bin/bash
    Hello-World
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cat passwd                    
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed '/^r/a Hello-World' passwd         #在以"r"开头的行后追加一行"Hello-World"字符并将结果输出到控制台,但是此操作并不会修改源文件内容哟~
    [root@node101.yinzhengjie.org.cn ~]# ll -i                          #注意观察文件的inode节点数字编号
    total 4
    1835019 -rw-r--r--. 1 root root 897 Jan  7 00:01 passwd
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cat passwd 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -i.bak '/^r/a Hello-World' passwd        #将以"r"开头的行追加一行"Hello-World"的字符内容,并将结果写入新的"passwd"文件,将原来的"passwd"更名为"passwd.bak"文件名(可以通过inode编号查看)   
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll -i                            #注意观察下面两个文件的inode编号信息,很明显,之前的源文件被更名为"passwd.bak"啦~
    total 8
    1835016 -rw-r--r--. 1 root root 909 Jan  7 00:01 passwd
    1835019 -rw-r--r--. 1 root root 897 Jan  7 00:01 passwd.bak
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cat passwd.bak 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin          
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cat passwd
    root:x:0:0:root:/root:/bin/bash
    Hello-World
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -i.bak '/^r/a Hello-World' passwd    #将以"r"开头的行追加一行"Hello-World"的字符内容,并将结果写入新的"passwd"文件,将原来的"passwd"更名为"passwd.bak"文件名(可以通过inode编号查看) 
    [root@node101.yinzhengjie.org.cn ~]# cat passwd                    
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -i '/^r/a Hello-World' passwd                    #在以"r"开头的行追加一行"Hello-World"字符内容,注意:"-i"选项并没有将修改后的结果打印在当前终端而是直接修改了源文件内容。
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cat passwd                       
    root:x:0:0:root:/root:/bin/bash
    Hello-World
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -i '/^r/a Hello-World' passwd       #在以"r"开头的行追加一行"Hello-World"字符内容,注意:"-i"选项并没有将修改后的结果打印在当前终端而是直接修改了源文件内容。

    7>.使用编辑命令"w"(保存模式匹配的行至指定文件) 

    [root@node101.yinzhengjie.org.cn ~]# ll
    total 4
    -rw-r--r--. 1 root root 897 Jan  7 00:01 passwd
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 10 20
    11
    13
    15
    17
    19
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 10 20 | sed '3,5w sed.log'          #将第三行到第五行到内容保存到当前目录命名为"sed.log"
    11
    13
    15
    17
    19
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll
    total 8
    -rw-r--r--. 1 root root 897 Jan  7 00:01 passwd
    -rw-r--r--. 1 root root   9 Jan  7 04:58 sed.log
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cat sed.log                     #很明显,保存到内容的确是咱们匹配到的数据。
    13
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 10 20 | sed '3,5w sed.log'         #将第三行到第五行到内容保存到当前目录命名为"sed.log" 

    8>.使用编辑命令"r"(读取指定文件的文本至模式空间中匹配到的行后) 

    [root@node101.yinzhengjie.org.cn ~]# cat /etc/issue
    S
    Kernel 
     on an m
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 10
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 10 | sed '5,7r /etc/issue'                #在第五行到第七行每行后面追加一个"/etc/issue"文本内容。
    1
    2
    3
    4
    5
    S
    Kernel 
     on an m
    
    6
    S
    Kernel 
     on an m
    
    7
    S
    Kernel 
     on an m
    
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 10 | sed '5,7r /etc/issue'                #在第五行到第七行每行后面追加一个"/etc/issue"文本内容。

    9>.使用编辑命令"="(为模式空间中的行打印行号

    [root@node101.yinzhengjie.org.cn ~]# cat /etc/fstab 
    
    #
    # /etc/fstab
    # Created by anaconda on Tue Dec 31 06:26:02 2019
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
    UUID=46f4c091-9496-4837-835e-8f6fe81a6166 /boot                   ext4    defaults        1 2
    /dev/mapper/VolGroup-lv_home /home                   ext4    defaults        1 2
    /dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed '/^/dev/=' /etc/fstab                     #将匹配到的行对应的行号在其上一行打印。
    
    #
    # /etc/fstab
    # Created by anaconda on Tue Dec 31 06:26:02 2019
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    9
    /dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
    UUID=46f4c091-9496-4837-835e-8f6fe81a6166 /boot                   ext4    defaults        1 2
    11
    /dev/mapper/VolGroup-lv_home /home                   ext4    defaults        1 2
    12
    /dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed '/^/dev/=' /etc/fstab                  #将匹配到的行对应的行号在其上一行打印。

    10>.使用编辑命令"!"(模式空间中匹配行取反处理) 

    [root@node101.yinzhengjie.org.cn ~]# cat /etc/fstab                 
    
    #
    # /etc/fstab
    # Created by anaconda on Tue Dec 31 06:26:02 2019
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
    UUID=46f4c091-9496-4837-835e-8f6fe81a6166 /boot                   ext4    defaults        1 2
    /dev/mapper/VolGroup-lv_home /home                   ext4    defaults        1 2
    /dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '/^/dev/!p' /etc/fstab                     #匹配不以"/dev"开头的行。
    
    #
    # /etc/fstab
    # Created by anaconda on Tue Dec 31 06:26:02 2019
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    UUID=46f4c091-9496-4837-835e-8f6fe81a6166 /boot                   ext4    defaults        1 2
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '/^/dev/!p' /etc/fstab                #匹配不以"/dev"开头的行。

    11>.使用编辑命令"s///"(查找替换,支持使用其它分隔符,如:"s@@@","s###")

    [root@node101.yinzhengjie.org.cn ~]# cp /etc/fstab ./
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll
    total 4
    -rw-r--r--. 1 root root 556 Jan  7 05:26 fstab
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cat fstab 
    
    #
    # /etc/fstab
    # Created by anaconda on Tue Dec 31 06:26:02 2019
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
    UUID=46f4c091-9496-4837-835e-8f6fe81a6166 /boot                   ext4    defaults        1 2
    /dev/mapper/VolGroup-lv_home /home                   ext4    defaults        1 2
    /dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed 's/dev/DEV/' fstab                     #将小写的"dev"替换为"DEV"
    
    #
    # /etc/fstab
    # Created by anaconda on Tue Dec 31 06:26:02 2019
    #
    # Accessible filesystems, by reference, are maintained under '/DEV/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /DEV/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
    UUID=46f4c091-9496-4837-835e-8f6fe81a6166 /boot                   ext4    defaults        1 2
    /DEV/mapper/VolGroup-lv_home /home                   ext4    defaults        1 2
    /DEV/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed 's/dev/DEV/' fstab                     #将小写的"dev"替换为"DEV"
    [root@node101.yinzhengjie.org.cn ~]# getenforce 
    Enforcing
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cat /etc/selinux/config 
    
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #     enforcing - SELinux security policy is enforced.
    #     permissive - SELinux prints warnings instead of enforcing.
    #     disabled - No SELinux policy is loaded.
    SELINUX=enforcing
    # SELINUXTYPE= can take one of three values:
    #     targeted - Targeted processes are protected,
    #     minimum - Modification of targeted policy. Only selected processes are protected. 
    #     mls - Multi Level Security protection.
    SELINUXTYPE=targeted
    
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config         #修改操作系统中selinux的默认值为disabled
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cat /etc/selinux/config                                            
    
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #     enforcing - SELinux security policy is enforced.
    #     permissive - SELinux prints warnings instead of enforcing.
    #     disabled - No SELinux policy is loaded.
    SELINUX=disabled
    # SELINUXTYPE= can take one of three values:
    #     targeted - Targeted processes are protected,
    #     minimum - Modification of targeted policy. Only selected processes are protected. 
    #     mls - Multi Level Security protection.
    SELINUXTYPE=targeted
    
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config         #修改操作系统中selinux的默认值为disabled
    [root@node101.yinzhengjie.org.cn ~]# cat /etc/selinux/config 
    
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #     enforcing - SELinux security policy is enforced.
    #     permissive - SELinux prints warnings instead of enforcing.
    #     disabled - No SELinux policy is loaded.
    SELINUX=disabled
    # SELINUXTYPE= can take one of three values:
    #     targeted - Targeted processes are protected,
    #     minimum - Modification of targeted policy. Only selected processes are protected. 
    #     mls - Multi Level Security protection.
    SELINUXTYPE=targeted
    
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -r -i 's/(SELINUX=)disabled/1enforcing/' /etc/selinux/config                   #将操作系统中selinux的默认值还原(使用"-r"选项可以支持使用扩展正则表达式)。                           
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cat /etc/selinux/config                                           
    
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #     enforcing - SELinux security policy is enforced.
    #     permissive - SELinux prints warnings instead of enforcing.
    #     disabled - No SELinux policy is loaded.
    SELINUX=enforcing
    # SELINUXTYPE= can take one of three values:
    #     targeted - Targeted processes are protected,
    #     minimum - Modification of targeted policy. Only selected processes are protected. 
    #     mls - Multi Level Security protection.
    SELINUXTYPE=targeted
    
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -r -i 's/(SELINUX=)disabled/1enforcing/' /etc/selinux/config         #将操作系统中selinux的默认值还原(使用"-r"选项可以支持使用扩展正则表达式)。
    [root@node101.yinzhengjie.org.cn ~]# ifconfig 
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.30.1.101  netmask 255.255.255.0  broadcast 172.30.1.255
            inet6 fe80::21c:42ff:fee6:d8a3  prefixlen 64  scopeid 0x20<link>
            ether 00:1c:42:e6:d8:a3  txqueuelen 1000  (Ethernet)
            RX packets 7651  bytes 811128 (792.1 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 4362  bytes 1202712 (1.1 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 64  bytes 5792 (5.6 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 64  bytes 5792 (5.6 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ifconfig eth0 | sed -n '2p' | sed 's/^.*inet //' | sed 's/net.*$//'        #使用sed命令取出IP地址
    172.30.1.101  
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ifconfig eth0 | sed -n '2p' | sed 's/^.*inet //' | sed 's/net.*$//'        #使用sed命令取出IP地址
    [root@node101.yinzhengjie.org.cn ~]# ifconfig 
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.30.1.101  netmask 255.255.255.0  broadcast 172.30.1.255
            inet6 fe80::21c:42ff:fee6:d8a3  prefixlen 64  scopeid 0x20<link>
            ether 00:1c:42:e6:d8:a3  txqueuelen 1000  (Ethernet)
            RX packets 7651  bytes 811128 (792.1 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 4362  bytes 1202712 (1.1 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 64  bytes 5792 (5.6 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 64  bytes 5792 (5.6 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ifconfig eth0 | sed -n '2p' | sed -e 's/^.*inet //' -e 's/net.*$//'           #使用sed取出IP地址(使用"-e"选项支持多点编辑)。 
    172.30.1.101  
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ifconfig eth0 | sed -n '2p' | sed -e 's/^.*inet //' -e 's/net.*$//'         #使用sed取出IP地址(使用"-e"选项支持多点编辑)。
    [root@node101.yinzhengjie.org.cn ~]# ifconfig 
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.30.1.101  netmask 255.255.255.0  broadcast 172.30.1.255
            inet6 fe80::21c:42ff:fee6:d8a3  prefixlen 64  scopeid 0x20<link>
            ether 00:1c:42:e6:d8:a3  txqueuelen 1000  (Ethernet)
            RX packets 7922  bytes 842059 (822.3 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 4498  bytes 1226720 (1.1 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 64  bytes 5792 (5.6 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 64  bytes 5792 (5.6 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ifconfig eth0 | sed -n -e '2s/^.*inet //' -e '2s/net.*$//p'           #使用sed命令取出IP地址
    172.30.1.101  
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ifconfig eth0 | sed -n -e '2s/^.*inet //' -e '2s/net.*$//p'              #使用sed命令取出IP地址
    [root@node101.yinzhengjie.org.cn ~]# ifconfig 
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.30.1.101  netmask 255.255.255.0  broadcast 172.30.1.255
            inet6 fe80::21c:42ff:fee6:d8a3  prefixlen 64  scopeid 0x20<link>
            ether 00:1c:42:e6:d8:a3  txqueuelen 1000  (Ethernet)
            RX packets 8759  bytes 936445 (914.4 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 4927  bytes 1303250 (1.2 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 64  bytes 5792 (5.6 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 64  bytes 5792 (5.6 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ifconfig eth0 | sed -nr '2s/^[^0-9]+([0-9.]+).*/1/p'                #CentOS6/7获取IP地址的方法
    172.30.1.101
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ifconfig eth0 | sed -nr '2s/^[^0-9]+([0-9.]+).*/1/p'                  #CentOS6/7获取IP地址的方法 
    [root@node101.yinzhengjie.org.cn ~]# cat /etc/default/grub                                                                                     
    GRUB_TIMEOUT=5
    GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
    GRUB_DEFAULT=saved
    GRUB_DISABLE_SUBMENU=true
    GRUB_TERMINAL_OUTPUT="console"
    GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=VolGroup/lv_root rd.lvm.lv=VolGroup/lv_swap rhgb quiet"
    GRUB_DISABLE_RECOVERY="true"
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -nr '/CMDLINE/s#(.*)"#1 net.ifnames=0"#p' /etc/default/grub 
    GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=VolGroup/lv_root rd.lvm.lv=VolGroup/lv_swap rhgb quiet net.ifnames=0"
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -r -i '/CMDLINE/s#(.*)"#1 net.ifnames=0"#' /etc/default/grub                #使用sed命令将网卡命名规则改为传统命名方式。
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cat /etc/default/grub                                             
    GRUB_TIMEOUT=5
    GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
    GRUB_DEFAULT=saved
    GRUB_DISABLE_SUBMENU=true
    GRUB_TERMINAL_OUTPUT="console"
    GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=VolGroup/lv_root rd.lvm.lv=VolGroup/lv_swap rhgb quiet net.ifnames=0"
    GRUB_DISABLE_RECOVERY="true"
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# grub2-mkconfig -o /boot/grub2/grub.cfg                              #将"/etc/default/grub"文件同步到"/etc/grub2/grub.cfg"文件中,以便下次重启操作系统将会使用最新的grub配置文件(也就是咱们上面修改后的文件)。
    Generating grub configuration file ...
    Found linux image: /boot/vmlinuz-3.10.0-957.el7.x86_64
    Found initrd image: /boot/initramfs-3.10.0-957.el7.x86_64.img
    Found linux image: /boot/vmlinuz-0-rescue-0632c624d979f14bab190b3eab3473f1
    Found initrd image: /boot/initramfs-0-rescue-0632c624d979f14bab190b3eab3473f1.img
    done
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -r -i '/CMDLINE/s#(.*)"#1 net.ifnames=0"#' /etc/default/grub           #使用sed命令将网卡命名规则改为传统命名方式。 
    [root@node101.yinzhengjie.org.cn ~]# cat /etc/default/grub 
    GRUB_TIMEOUT=5
    GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
    GRUB_DEFAULT=saved
    GRUB_DISABLE_SUBMENU=true
    GRUB_TERMINAL_OUTPUT="console"
    GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=VolGroup/lv_root rd.lvm.lv=VolGroup/lv_swap rhgb quiet net.ifnames=0"
    GRUB_DISABLE_RECOVERY="true"
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -ri '/CMDLINE/s#(.*) net.ifnames=0"#1"#' /etc/default/grub              #将上一步的修改操作还原。
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cat /etc/default/grub                                           
    GRUB_TIMEOUT=5
    GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
    GRUB_DEFAULT=saved
    GRUB_DISABLE_SUBMENU=true
    GRUB_TERMINAL_OUTPUT="console"
    GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=VolGroup/lv_root rd.lvm.lv=VolGroup/lv_swap rhgb quiet"
    GRUB_DISABLE_RECOVERY="true"
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -ri '/CMDLINE/s#(.*) net.ifnames=0"#1"#' /etc/default/grub             #将上一步的修改操作还原。
    [root@node101.yinzhengjie.org.cn ~]# cat /etc/passwd     
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# grep ftp /etc/passwd
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# grep ftp /etc/passwd | sed 's/[[:alpha:]]/u/g'
    ::14:50: ://://
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# grep ftp /etc/passwd | sed 's/[[:alpha:]]/u&/g'
    FTP:X:14:50:FTP USER:/VAR/FTP:/SBIN/NOLOGIN
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# grep ftp /etc/passwd | sed 's/[[:alpha:]]/l&/g'
    ftp:x:14:50:ftp user:/var/ftp:/sbin/nologin
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '/^ftp/s/[[:alpha:]]/l&/gp' /etc/passwd                         
    ftp:x:14:50:ftp user:/var/ftp:/sbin/nologin
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '/^ftp/s/[[:alpha:]]/u&/gp' /etc/passwd         #匹配以"ftp"开头的行并将所有字母转换为大写,其中"&"表示匹配到的所有字符。
    FTP:X:14:50:FTP USER:/VAR/FTP:/SBIN/NOLOGIN
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '/^ftp/s/[[:alpha:]]/u&/gp' /etc/passwd                      #匹配以"ftp"开头的行并将所有字母转换为大写,其中"&"表示匹配到的所有字符。
    [root@node101.yinzhengjie.org.cn ~]# cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    jason:x:1000:1000:正杰 尹:/home/jason:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# NAME=root                              #咱们可以自定义一个变量。
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $NAME     
    root
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# grep "$NAME" /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n "/$NAME/p" /etc/passwd               #sed也支持引用变量来匹配要查找的值
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '/'''$NAME'''/p' /etc/passwd           #如果不想使用双引号引用变量的话其实使用三引号也是可以的支持变量引用的哟~
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# sed -n '/'''$NAME'''/p' /etc/passwd                             #如果不想使用双引号引用变量的话其实使用三引号也是可以的支持变量引用的哟~

    三.sed的高级用法

    1>.高级编辑命令

        "P":
        打印模式空间开端至
    内容,并追加到默认输出之前 
    
      "h": 
        把模式空间中的内容覆盖至保持空间中

    
        "H":
        把模式空间中的内容追加至保持空间中

    
        "g": 
            从保持空间取出数据覆盖至模式空间 
    
        "G":
            从保持空间取出内容追加至模式空间

    
        "x": 
        把模式空间中的内容与保持空间中的内容进行互换 
    
      "n": 
        读取匹配到的行的下一行覆盖至模式空间

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

    
        "d": 
        删除模式空间中的行
    
      "D":
        如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本, 并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间 不包含换行符,则会像发出d命令那样启动正常的新循环 

    2>使用编辑命令"n"(读取匹配到的行的下一行覆盖至模式空间
)

    [root@node101.yinzhengjie.org.cn ~]# seq  1 10
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq  1 10 | sed -n 'n;p'              #最终达到的效果就是打印偶数行。
    2
    4
    6
    8
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10 | sed -n 'n;p'              #最终达到的效果就是打印偶数行。

    3>.使用sed的将输入内容倒着打印输出

    [root@node101.yinzhengjie.org.cn ~]# seq  1 10
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq  1 10 | sed  '1!G;h;$!d'          #使用sed将文本内容倒着打印输出。
    10
    9
    8
    7
    6
    5
    4
    3
    2
    1
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq  1 10 | tac
    10
    9
    8
    7
    6
    5
    4
    3
    2
    1
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10 | sed '1!G;h;$!d'          #使用sed将文本内容倒着打印输出。

    4>.使用sed只打印最后一行

    [root@node101.yinzhengjie.org.cn ~]# seq  1 10
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq  1 10 | sed 'N;D'
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq  1 10 | tail -1
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# seq 1 10 | sed 'N;D' 

    5>.小试牛刀 

      (1)删除centos7系统/etc/grub2.cfg文件中所有以空白开头的行行首的空白字符 
      (2)删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
      (3)在centos6系统/root/install.log每一行行首增加#号
      (4)在/etc/fstab文件中不以#开头的行的行首增加#号
      (5)处理/etc/fstab路径,使用sed命令取出其目录名和基名
      (6)利用sed 取出ifconfig命令中本机的IPv4地址
      (7)统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个 字段的重复次数
      (8)统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和 sed两种方法分别实现
      (9)将文本文件的n和n+1行合并为一行,n为奇数行
  • 相关阅读:
    TCP 连接断连问题剖析
    libtool: link: you must specify an output file
    socket编程bind浮动ip
    epoll或者kqueue的原理是什么?
    推荐 30 款最好的免费项目管理软件
    QNX开发最完整图文教程(官方文档,非官方翻译)
    Android 4.X系列の界面设计中退出Android程序的代码
    APScheduler 定时任务系统
    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。
    APSchenuler嵌入Django
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/12154476.html
Copyright © 2020-2023  润新知