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,5'p 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 '1'p -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,20'd 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,20'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 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