sed 可以替换指定的的字符
用法和 grep 差不多,
不加 - n 是匹配所有的行
-n 匹配 root 的行
- [root@kylin sed]# sed -n /root/p passwd
- root:x:0:0:root:/root:/bin/bash
- operator:x:11:0:operator:/root:/sbin/nologin
同用也是支持. 的
- [root@kylin sed]# sed -n /r.t/p passwd
- operator:x:11:0:operator:/root:/sbin/nologin
- sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
-r 是脱意,
- [root@kylin sed]# sed -nr /o+t/p passwd
- root:x:0:0:root:/root:/bin/bash
- operator:x:11:0:operator:/root:/sbin/nologin
- [root@kylin sed]# sed -n /r*t/p passwd
匹配两次 o
- [root@kylin sed]# sed -nr /o{2}/p passwd
- root:x:0:0:root:/root:/bin/bash
- lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
- mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
- operator:x:11:0:operator:/root:/sbin/nologin
- postfix:x:89:89::/var/spool/postfix:/sbin/nologin
打印 2-5 行
- [root@kylin sed]# sed -n 2,5p passwd
- 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
打印 20 到最后的行
- [root@kylin sed]# sed -n 20,$p passwd
- sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
- chrony:x:997:995::/var/lib/chrony:/sbin/nologin
- sam:x:1000:1000::/home/sam:/bin/bash
- kylin:x:1001:1001::/home/kylin:/bin/bash
- miko:x:1002:1003::/home/miko:/bin/bash
- candy:x:1003:1004::/home/candy:/bin/bash
全部打印出来
[root@kylin sed]# sed -n 1,$p passwd
-e 多条件匹配
- [root@kylin sed]# sed -e 1p -e /kylin/p -n passwd
- root:x:0:0:root:/root:/bin/bash
- kylin:x:1001:1001::/home/kylin:/bin/bash
-I 不区分大小写, I 需要放在 p 的前面
- [root@kylin sed]# sed -n /kylin/Ip passwd
- Kylin
- kylin:x:1001:1001::/home/kylin:/bin/bash
删除 1-20 行, 这样是不写入文件的,
- [root@kylin sed]# sed 1,20d passwd
- sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
- chrony:x:997:995::/var/lib/chrony:/sbin/nologin
- sam:x:1000:1000::/home/sam:/bin/bash
- kylin:x:1001:1001::/home/kylin:/bin/bash
- miko:x:1002:1003::/home/miko:/bin/bash
- candy:x:1003:1004::/home/candy:/bin/bash
-i 删除文件的时候是写入文件的
- [root@kylin sed]# sed -i 1,20d passwd
- [root@kylin sed]# cat passwd
- sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
- chrony:x:997:995::/var/lib/chrony:/sbin/nologin
- sam:x:1000:1000::/home/sam:/bin/bash
- kylin:x:1001:1001::/home/kylin:/bin/bash
- miko:x:1002:1003::/home/miko:/bin/bash
- candy:x:1003:1004::/home/candy:/bin/bash
删除带 candy 的行
- [root@kylin sed]# sed -i /candy/d passwd
- [root@kylin sed]# cat passwd
- sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
- chrony:x:997:995::/var/lib/chrony:/sbin/nologin
- kylin:x:1001:1001::/home/kylin:/bin/bash
- miko:x:1002:1003::/home/miko:/bin/bash
替换 和 vim 里面的替换差不多
- [root@kylin sed]# sed 1,10s/root/toor/g passwd |head
- root:x:0:0:root:/root:/bin/bash
- bin:x:1:1:bin:/bin:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- Kylin
- 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
也是支持特殊符号的, 需要加 - r
- [root@kylin sed]# sed -r 1,10s/ro+/r/g passwd |head
- rt:x:0:0:rt:/rt:/bin/bash
- bin:x:1:1:bin:/bin:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- Kylin
- 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
把第一段和最后一段换一下位置,
([^:]+) 第一段是一个或多个非冒号
(.*) 贪婪匹配一直匹配到最后一个冒号
([^:]+) 非冒号的字符
\3:\2:\1 这个原来的位置应该是 123, 但是需要把第一部分和第三部分换位置就需要把 3 写在前面, 把 1 写在后面
每一个小括号括起来的都是一段, 一个整体
- [root@kylin sed]# head passwd |sed -r s/([^:]+):(.*):([^:]+)/\3:\2:\1$bin/bash:x:0:0:root:/root:root
- /sbin/nologin:x:1:1:bin:/bin:bin
- /sbin/nologin:x:2:2:daemon:/sbin:daemon
- Kylin
- /sbin/nologin:x:3:4:adm:/var/adm:adm
- /sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
- /bin/sync:x:5:0:sync:/sbin:sync
- /sbin/shutdown:x:6:0:shutdown:/sbin:shutdown
- /sbin/halt:x:7:0:halt:/sbin:halt
- /sbin/nologin:x:8:12:mail:/var/spool/mail:mail
如果需要替换的里面带有这种 / 符号的, 可以用 \ 来脱意一下, 也可以换一种符号, 用 #$ 这些都可以的, 只要可以区分就可以了
- [root@kylin sed]# sed s#/root#sam#g passwd |head
- [root@kylin sed]# sed s/\/root/sam/g passwd |head
- root:x:0:0:root:sam:/bin/bash
- bin:x:1:1:bin:/bin:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- Kylin
- 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
可以替换所有的英文
- [root@kylin sed]# sed s/[a-zA-Z]//g passwd |head
- ::0:0::/://
- ::1:1::/://
- ::2:2::/://
- ::3:4:://://
- ::4:7::///://
- ::5:0::/://
- ::6:0::/://
- ::7:0::/://
- ::8:12::///://
每行的前面加上 #
- [root@kylin sed]# sed s/^/#/g passwd |head
- #root:x:0:0:root:/root:/bin/bash
- #bin:x:1:1:bin:/bin:/sbin/nologin
- #daemon:x:2:2:daemon:/sbin:/sbin/nologin
- #Kylin
- #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
上面的也可以用.,. 代表匹配所有需要加上 - r 脱意
- [root@kylin sed]# sed -r s/.*/sam:&/g passwd |head
- sam:root:x:0:0:root:/root:/bin/bash
- sam:bin:x:1:1:bin:/bin:/sbin/nologin
- sam:daemon:x:2:2:daemon:/sbin:/sbin/nologin
- sam:Kylin
- sam:adm:x:3:4:adm:/var/adm:/sbin/nologin
- sam:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
- sam:sync:x:5:0:sync:/sbin:/bin/sync
- sam:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
- sam:halt:x:7:0:halt:/sbin:/sbin/halt
- sam:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
在 Kylin 行前面加上一个 sam:
- [root@kylin sed]# sed s/^Kylin/sam:&/g passwd |head
- root:x:0:0:root:/root:/bin/bash
- bin:x:1:1:bin:/bin:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- sam:Kylin
- 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
来源: http://www.bubuko.com/infodetail-2526527.html