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":
      在指定行后面追加文本,支持使用\n实现多行追加


  "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"(在指定行后面追加文本,支持使用\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 '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\n2019\nWorld'      #在第三行后可以追加多行内容,需要使用Linux默认的换行符("\n")隔开
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\n2019\nWorld'      #在第三行后可以追加多行内容,需要使用Linux默认的换行符("\n")隔开

[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\n2019\nWorld'        #在第三行前面追加多行内容,使用Linux默认的换行符("\n")分割即可。
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\n2019\nWorld'      #在第三行前面追加多行内容,使用Linux默认的换行符("\n")分割即可。

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\n2019\nWorld'          #将第三行的内容使用多行替换掉,多行之间使用Linux默认的换行符("\n")分割
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\n2019\nWorld'      #将第三行的内容使用多行替换掉,多行之间使用Linux默认的换行符("\n")分割

6>.使用编辑命令"a"(在指定行后面追加文本,支持使用\n实现多行追加)结和"-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 \r 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 \r on an \m

6
\S
Kernel \r on an \m

7
\S
Kernel \r 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":
    打印模式空间开端至n内容,并追加到默认输出之前 

  "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为奇数行
目录
相关文章
|
4月前
|
Linux Perl
一个神奇的Linux命令-sed
一个神奇的Linux命令-sed
19 1
|
24天前
|
Linux Perl
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
|
26天前
|
Linux Shell Perl
在Linux中,如何使用sed命令进行文本替换?
在Linux中,如何使用sed命令进行文本替换?
|
25天前
|
数据挖掘 Linux Perl
在Linux中,awk和sed命令的作用?
在Linux中,awk和sed命令的作用?
|
26天前
|
Linux BI 数据处理
在Linux中,如何使用awk和sed进行文本处理?
在Linux中,如何使用awk和sed进行文本处理?
|
2月前
|
Shell Linux C语言
|
3月前
|
存储 Linux BI
Linux 三剑客 grep、sed、awk
Linux三剑客`grep`、`sed`和`awk`是强大的文本处理工具。`grep`用正则表达式搜索匹配行;`sed`是流式编辑器,处理文本流而不直接修改原文件;`awk`则用于灵活的文本分析和报告生成。例如,`grep`可查找匹配模式,`sed`可以删除文件内容,而`awk`能提取特定字段。通过组合使用,它们能高效解决复杂文本任务。
49 1
|
2月前
|
存储 Unix Linux
探索Linux中的sed命令:强大的文本处理工具
`sed`是Linux/Unix的流编辑器,用于文本替换、删除、新增等操作,无需直接编辑文件。它逐行处理输入,存储在模式空间,执行脚本后输出。主要特点是非交互、支持正则表达式和简洁语法。示例:`sed &#39;s/apple/orange/g&#39; example.txt`替换文本,`/error/d`删除包含&quot;error&quot;的行,`a\---`在每行后加&quot;---&quot;。使用时注意备份、测试命令和理解正则表达式。
|
3月前
|
数据挖掘 Unix Linux
探索Linux中的强大文本处理工具——dgawk
dgawk,GNU awk的增强版,是一款强大的Linux文本处理工具,擅长模式扫描和数据提取。它提供复杂文本分析、易用性、可定制脚本及高效处理大文件的能力。基本语法为`dgawk &#39;pattern { action }&#39; file`。通过打印、模式匹配、字段操作、BEGIN/END块及自定义函数等功能,用户能高效处理文本数据。掌握dgawk能提升文本分析效率,对系统管理员和数据分析师尤其有用。
|
3月前
|
Shell Linux Perl
Linux shell脚本sed使用
Linux shell脚本sed使用
34 1