sed的基本用法

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章