本文共 5960 字,大约阅读时间需要 19 分钟。
sed 可以替换指定的的字符
用法和grep差不多,不加-n是匹配所有的行
-n 匹配root的行[root@kylin sed]# sed -n '/root/'p passwdroot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin同用也是支持.的
[root@kylin sed]# sed -n '/r.t/'p passwd operator:x:11:0:operator:/root:/sbin/nologinsshd: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/bashoperator: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/bashlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologin打印2-5行
[root@kylin sed]# sed -n '2,5'p passwdbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp: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/nologinchrony:x:997:995::/var/lib/chrony:/sbin/nologinsam:x:1000:1000::/home/sam:/bin/bashkylin:x:1001:1001::/home/kylin:/bin/bashmiko:x:1002:1003::/home/miko:/bin/bashcandy: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 passwdroot:x:0:0:root:/root:/bin/bashkylin:x:1001:1001::/home/kylin:/bin/bash-I 不区分大小写,I需要放在p的前面
[root@kylin sed]# sed -n '/kylin/'Ip passwd Kylinkylin:x:1001:1001::/home/kylin:/bin/bash删除1-20行,这样是不写入文件的,
[root@kylin sed]# sed '1,20'd passwdsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologinchrony:x:997:995::/var/lib/chrony:/sbin/nologinsam:x:1000:1000::/home/sam:/bin/bashkylin:x:1001:1001::/home/kylin:/bin/bashmiko:x:1002:1003::/home/miko:/bin/bashcandy:x:1003:1004::/home/candy:/bin/bash-i 删除文件的时候是写入文件的
[root@kylin sed]# sed -i '1,20'd passwd[root@kylin sed]# cat passwdsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologinchrony:x:997:995::/var/lib/chrony:/sbin/nologinsam:x:1000:1000::/home/sam:/bin/bashkylin:x:1001:1001::/home/kylin:/bin/bashmiko:x:1002:1003::/home/miko:/bin/bashcandy: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/nologinchrony:x:997:995::/var/lib/chrony:/sbin/nologinkylin:x:1001:1001::/home/kylin:/bin/bashmiko:x:1002:1003::/home/miko:/bin/bash替换 和vim里面的替换差不多
[root@kylin sed]# sed '1,10s/root/toor/g' passwd |headroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinKylinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologin也是支持特殊符号的,需要加-r
[root@kylin sed]# sed -r '1,10s/ro+/r/g' passwd |headrt:x:0:0:rt:/rt:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinKylinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail: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:daemonKylin/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/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinKylinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail: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/bashsam:bin:x:1:1:bin:/bin:/sbin/nologinsam:daemon:x:2:2:daemon:/sbin:/sbin/nologinsam:Kylinsam:adm:x:3:4:adm:/var/adm:/sbin/nologinsam:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsam:sync:x:5:0:sync:/sbin:/bin/syncsam:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdownsam:halt:x:7:0:halt:/sbin:/sbin/haltsam: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/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinsam:Kylinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologin转载于:https://blog.51cto.com/huazi1991/2086228