sed 命令是利用脚本来处理文本文件。它可以依照脚本的指令来处理、编辑文本文件。主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
但是使用sed命令对文本进行操作之前必须要知道它的原理,它是怎么工作中的,这个非常重要,否则会影响操作的结果的正确性
读入新的一行内容到缓存空间;
从指定的操作指令中取出第一条指令,判断是否匹配pattern;
如果不匹配,则忽略后续的编辑命令,回到第2步继续取出下一条指令;
如果匹配,则针对缓存的行执行后续的编辑命令;完成后,回到第2步继续取出下一条指令;
当所有指令都应用之后,输出缓存行的内容;回到第1步继续读入下一行内容;
当所有行都处理完之后,结束;
sed常用选项
选项 | 含义 |
---|---|
-e | 进行多次编辑 |
-n | 取消默认输出 |
-f | 指定sed文件名 |
-i | 直接在源文件中修改 |
-r | 使用扩展正则表达式 |
sed常用命令动作
命令动作 | 含义 |
---|---|
p | 打印输出 |
d | 删除指定行 |
i | 在指定行之前插入内容 |
a | 在指定行后面插入内容 |
c | 替换指定行所有内容 |
s | 搜索替换 |
sed [options] script filename
options指的是sed的命令行参数,比较有限,这个后面会说明。
script是指需要对输入执行的一个或者多个操作指令,一般需要用单引号括起来,这样可以避免shell对特殊字符的处理。sed会依次读取输入文件的每一行到缓存中并应用script中指定的操作指令,因此而带来的变化并不会影响最初的文件(除非option加了-i参数)。
每条操作指令由pattern和procedure两部分组成,顾名思义,pattern是匹配的规则,一般为用’/'分隔的正则表达式(也有可能是行号,具体参见Sed命令地址匹配问题总结),而procedure则是一连串编辑命令(action)。
自己总结:sed命令+选项 ‘定位+动作+内容’ 文件名
单引号里不指定任何操作它会把文件从第一行打印到最后一行
[root@server ~]# sed '' passwd.txt
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
如果使用‘p’它会重复显示每一行,因为它默认会打印一遍,然后又得到你的指定是打印,它就又打印一遍
[root@server ~]# sed 'p' passwd.txt
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
所以如果不想看到重复信息,前面用-n选项
[root@server ~]# sed -n 'p' passwd.txt
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@server ~]# sed -n '2p' passwd.txt
bin:x:1:1:bin:/bin:/sbin/nologin
打印1-4行
[root@server ~]# sed -n '1,4p' passwd.txt
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
打印最后一行,打印第一行用‘1p’,不要用‘^p’
[root@server ~]# sed -n '$p' passwd.txt
operator:x:11:0:operator:/root:/sbin/nologin
打印有root的行
[root@server ~]# sed -n '/root/p' passwd.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
打印以root开头的行
[root@server ~]# sed -n '/^root/p' passwd.txt
root:x:0:0:root:/root:/bin/bash
不打印有nologin的行
[root@server ~]# sed -n '/nologin/!p' passwd.txt
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
打印root所在行的行号和内容,多个操作中间加分号隔开
[root@server ~]# sed -n '/root/=;/root/p' passwd.txt
1
root:x:0:0:root:/root:/bin/bash
10
operator:x:11:0:operator:/root:/sbin/nologin
打印以root开头或者以shutdown开头的行,使用了扩展元字符“|”,前面要加-r
[root@server ~]# sed -nr '/^root|^shutdown/p' passwd.txt
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
打印sync所在的行到第8行的内容,如果后面的数字小于前面内容的行号会显示错误
[root@server ~]# sed -n '/sync/,8p' passwd.txt
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
注意:通常-n和‘p’一起使用
在第2行上面插入hello world
[root@server ~]# sed '2ihello world' passwd.txt
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
在每一行的上面插入hello world(如果不指定行号或范围的话)
[root@server ~]# sed 'ihello world' passwd.txt
hello world
root:x:0:0:root:/root:/bin/bash
hello world
bin:x:1:1:bin:/bin:/sbin/nologin
hello world
daemon:x:2:2:daemon:/sbin:/sbin/nologin
hello world
adm:x:3:4:adm:/var/adm:/sbin/nologin
hello world
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
hello world
sync:x:5:0:sync:/sbin:/bin/sync
hello world
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
hello world
halt:x:7:0:halt:/sbin:/sbin/halt
hello world
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
hello world
operator:x:11:0:operator:/root:/sbin/nologin
在第3行的上面插入hello换行再插入world
[root@server ~]# sed '3ihello\nworld' passwd.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
hello
world
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
在第1行下面插入999
[root@server ~]# sed '1a999' passwd.txt
root:x:0:0:root:/root:/bin/bash
999
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
在最后一行下面插入999
[root@server ~]# sed '$a999' passwd.txt
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
999
在第2-第4行下面插入999,意思是2,3,4行每行下面都插入999
[root@server ~]# sed '2,4a999' passwd.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
999
daemon:x:2:2:daemon:/sbin:/sbin/nologin
999
adm:x:3:4:adm:/var/adm:/sbin/nologin
999
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开头的行整行替换为kgc
[root@server ~]# sed '/^root/ckgc' passwd.txt
kgc
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
把1-5行内容全部替换为kgc
[root@server ~]# sed '1,5ckgc' passwd.txt
kgc
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@server ~]# sed '1d' passwd.txt
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
删除1-4行
[root@server ~]# sed '1,4d' passwd.txt
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
删除有nologin的行
[root@server ~]# sed '/nologin/d' passwd.txt
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
不指定就是全部删除
[root@server ~]# sed 'd' passwd.txt
[root@server ~]#
格式:sed 选项 ‘s/搜索的内容/替换的内容/动作’
搜索root所在行把第一个出现的root换成ROOT
[root@server ~]# sed -n 's/root/ROOT/p' passwd.txt
ROOT:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/ROOT:/sbin/nologin
搜索root所在行,把所有出现的root都替换成ROOT
[root@server ~]# sed -n 's/root/ROOT/gp' passwd.txt
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
operator:x:11:0:operator:/ROOT:/sbin/nologin
把1-5行的开头都插入#号
[root@server ~]# sed -n '1,5s/^/#/gp' /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
为了后面实验将这条应用到源文件
[root@server ~]# sed -i '1,5s/^/#/g' passwd.txt
把#号开头的行去掉#号
[root@server ~]# sed -n 's/^#//gp' passwd.txt
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
把#号开头的行的#号换成hello world
[root@server ~]# sed -n 's/^#/hello world /gp' passwd.txt
hello world root:x:0:0:root:/root:/bin/bash
hello world bin:x:1:1:bin:/bin:/sbin/nologin
hello world daemon:x:2:2:daemon:/sbin:/sbin/nologin
hello world adm:x:3:4:adm:/var/adm:/sbin/nologin
hello world lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
把所有/sbin/nologin换成kgc,/需要转义
[root@server ~]# sed -n 's/\/sbin\/nologin/kgc/gp' passwd.txt
#bin:x:1:1:bin:/bin:kgc
#daemon:x:2:2:daemon:/sbin:kgc
#adm:x:3:4:adm:/var/adm:kgc
#lp:x:4:7:lp:/var/spool/lpd:kgc
mail:x:8:12:mail:/var/spool/mail:kgc
operator:x:11:0:operator:/root:kgc
另一种不需要转义的方式就是自己定义分隔符为@
[root@server ~]# sed -n '10s@/sbin/nologin@kgc@gp' passwd.txt
operator:x:11:0:operator:/root:kgc
我们只想搜索以sync开头的行并且前面加#号,那就需要保留sync,那就要把搜索的字符写成&就会被保留不会一起替换,观察不加&的区别
[root@server ~]# sed -n 's/^sync/#&/gp' passwd.txt
#sync:x:5:0:sync:/sbin:/bin/sync
[root@server ~]# sed -n 's/^sync/#/gp' passwd.txt
#:x:5:0:sync:/sbin:/bin/sync
我们还可以将其他文件插入到当前文件当中处理
将/etc/hosts文件插入到第三行后面
[root@server ~]# sed '3r /etc/hosts' passwd.txt
#root:x:0:0:root:/root:/bin/bash
#bin:x:1:1:bin:/bin:/sbin/nologin
#daemon:x:2:2:daemon:/sbin:/sbin/nologin
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#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@server ~]# sed 'r /etc/hosts' passwd.txt
#root:x:0:0:root:/root:/bin/bash
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#bin:x:1:1:bin:/bin:/sbin/nologin
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#daemon:x:2:2:daemon:/sbin:/sbin/nologin
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#adm:x:3:4:adm:/var/adm:/sbin/nologin
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
sync:x:5:0:sync:/sbin:/bin/sync
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
halt:x:7:0:halt:/sbin:/sbin/halt
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
operator:x:11:0:operator:/root:/sbin/nologin
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
在结尾插入/etc/hosts文件内容
[root@server ~]# sed '$r /etc/hosts' passwd.txt
#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
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
把1-5行内容写入到22.txt文件
[root@server ~]# sed -n '1,5w 22.txt' passwd.txt
[root@server ~]# cat -n 22.txt
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
在有多个操作的时候需要加-e选项,中间可以以分号间隔,也可以每一次都加-e
[root@server ~]# sed -ne '1p;5p' passwd.txt
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@server ~]# sed -ne '1p' -ne '5p' passwd.txt
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@server ~]# sed -ne '/root/=' -ne '/root/p' passwd.txt
1
root:x:0:0:root:/root:/bin/bash
10
operator:x:11:0:operator:/root:/sbin/nologin
这里用了扩展元字符“|”前面需要加-r选项
[root@server ~]# sed -r '/^#|^$/d' /etc/ssh/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp /usr/libexec/openssh/sftp-server
sed用=来显示行号
[root@server ~]# sed = passwd.txt
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
修改源文件的本质其实就是将-n换成-i,-i不要和‘p’同时使用,-n和-i也不要一起使用
[root@server ~]# sed -n '1,3s/^/#/gp' passwd.txt
#root:x:0:0:root:/root:/bin/bash
#bin:x:1:1:bin:/bin:/sbin/nologin
#daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@server ~]# sed -i '1,3s/^/#/g' passwd.txt
[root@server ~]# cat passwd.txt
#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
如果我们要对一个文件进行多个操作,为了方便和效率,可以将要执行的sed命令逐行写进sed脚本里面,然后用sed -f来指定脚本名对指定的文件进行操作
[root@server ~]# vim test.sh
#!/bin/sed -f
s/root/ROOT/g
s/^#//g
s/\/sbin\/nologin/kgc/g
[root@server ~]# sed -f test.sh passwd.txt
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
bin:x:1:1:bin:/bin:kgc
daemon:x:2:2:daemon:/sbin:kgc
adm:x:3:4:adm:/var/adm:kgc
lp:x:4:7:lp:/var/spool/lpd:kgc
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:kgc
operator:x:11:0:operator:/ROOT:kgc
注意: