sed命令的用法
-n:选项不打印文件的所有行
[root@slave ~]# sed '1'p 1 //不带-n选项,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 sync:x:5:0:sync:/sbin:/bin/sync halt:x:7:0:halt:/sbin:/sbin/halt uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/roo*:/sbin/nologin php-fpm:x:502:502::/home/php-fpm:/sbin/nologin rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin nginx:x:495:492:Nginx web server:/var/lib/nginx:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nagios:x:494:491::/var/spool/nagios:/sbin/nologin nrpe:x:493:490:NRPE user for the NRPE service:/var/run/nrpe:/sbin/nologin zabbix:x:492:489:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin root [root@slave ~]# sed -n '1'p 1 //加上-n后,只打印出所匹配的行 root:x:0:0:root:/root:/bin/bash
[root@slave ~]# sed -n '3,6'p 1 //打印出文件中的3,6行 sync:x:5:0:sync:/sbin:/bin/sync halt:x:7:0:halt:/sbin:/sbin/halt uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/roo*:/sbin/nologin [root@slave ~]# [root@slave ~]# sed -n '/root/'p 1 //打印出包含root的行 root:x:0:0:root:/root:/bin/bash root [root@slave ~]#
-e选项:表示执行多个编辑命令
[root@slave ~]# sed -n -e '/root/'p -e '/nginx/'p 1 //相当于执行两条命令 root:x:0:0:root:/root:/bin/bash nginx:x:495:492:Nginx web server:/var/lib/nginx:/sbin/nologin root [root@slave ~]# sed -n '/root/'p 1 ; sed -n '/nginx/'p 1 //两条命令的结果和上面加-e的结果是一样的 root:x:0:0:root:/root:/bin/bash root nginx:x:495:492:Nginx web server:/var/lib/nginx:/sbin/nologin
[root@slave ~]# sed '/ROOT/a\wang' 1 //在ROOT后面追加上wang root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin zabbix:x:492:489:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin root ROOT wang
-f选项:只有在调用sed脚本时才起作用
[root@slave ~]# vim 2.sed //建立一个sed脚本 #!/bin/sed -f //加上-f选项: /ROOT/a\ //这里的字母a表示添加。字母i表示插入,字母c修改文本的内容 usr\ local. ~ ~ [root@slave ~]# chmod u+x 2.sed //添加执行权限 [root@slave ~]# ./2.sed 1 //执行脚本文件,后面跟上要执行的文件 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync halt:x:7:0:halt:/sbin:/sbin/halt uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/roo*:/sbin/nologin zabbix:x:492:489:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin root ROOT usr //添加的内容 local.
sed文本定位
$:在sed命令中表示最后一行
[root@slave ~]# sed -n '$p' 1 ROOT [root@slave ~]# sed -n '1,16!'p 1 //文本共17行,'x,y!'表示匹配不再这范围之间的行 ROOT
用行号与关键字匹配
[root@slave ~]# sed -n '/ntp/,$'p 1 //打印从匹配到ntp的行至最后一行 ntp:x:38:38::/etc/ntp:/sbin/nologin nagios:x:494:491::/var/spool/nagios:/sbin/nologin nrpe:x:493:490:NRPE user for the NRPE service:/var/run/nrpe:/sbin/nologin zabbix:x:492:489:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin root ROOT [root@slave ~]#
sed表示替换文件:
s/被替换字符/新字符/[选项] {选项可为g表示替换文本中所有出现被替换的字符串之处;p表示只打印替换字符,与-n结合;w表示将输出定向到一个文件}
[root@slave ~]# sed -n 's/ROOT/root/p' 1 //将文件中的ROOT替换为root root [root@slave ~]# [root@slave ~]# touch 22 //创建一个文件,文件里写入3个root [root@slave ~]# vim 22 1 root wang root 2 root 3 root 4 ~
[root@slave ~]# sed -n 's/root/user/p' 22 //这样只是把每一行第一个匹配到的字符替换掉 user wwang root user user [root@slave ~]# sed -n 's/root/user/g'p 22 //替换掉所有匹配到的字符 user wwang user user user [root@slave ~]# [root@slave ~]# sed -n 's/root/user/w 33' 22 //加上w表示把修改后的文件写入到另一个文件中,若文件不存在则sed会自动创立该文件 [root@slave ~]# cat 33 user wwang root user user [root@slave ~]# [root@slave ~]# sed '5 q' 1 //匹配到前5行,然后退出 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync halt:x:7:0:halt:/sbin:/sbin/halt uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin [root@slave ~]#
[root@slave ~]# sed -n -e '/root/=' 1 //打印匹配到关键字所在的行号 1 16 [root@slave ~]# sed -n -e '/root/=' -e '/root/'p 1 //打印匹配到关键字的行及行号 1 root:x:0:0:root:/root:/bin/bash 16 root [root@slave ~]# sed -n '/root/{p;=}' 1 //添加花括号,指定再在位行上所执行的命令组 root:x:0:0:root:/root:/bin/bash 1 root 16 [root@slave ~]#