94 sed(上)
sed -n '/root/'p 匹配字符串root
[root@localhost grep]#sed -n '/root/'p passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
sed -n '2'p 打印第2行 sed -n '2,5'p打印2到5行
[root@localhost grep]#sed -n '2'p passwd
bin:x:1:1:bin:/bin:/sbin/NOLogin
[root@localhost grep]#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
sed -nr '/o+t/'p -r表示脱义 \也可以脱义(这里grep和egrep的正则都可以使用)
[root@localhost grep]#sed -nr '/o+t/'p passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost grep]#sed -n '/o\+t/'p passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
sed -n '15,$'p 打印15到最后一行 $表示最后一行
[root@localhost grep]#sed -n '15,$'p passwd
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
wsl:x:1000:1000::/home/wsl:/bin/bash
wsl1:x:1001:1001::/home/wsl1:/bin/bash
sed -e '1'p -e '/root/'p -n 先打印第一行再在第一行匹配root字符 -e 多个操作
[root@localhost grep]#sed -e '1'p -e '/root/'p -n passwd
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
95 sed(下)
sed -n '/nologin/'Ip 匹配nologin不区分大小写 I表示不区分大小写
[root@localhost grep]#sed -n '/nologin/'Ip passwd |head -3
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
sed '1,15'd 删除显示的1到15行 不是删除文件里面的
[root@localhost grep]#sed '1,15'd passwd
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
wsl:x:1000:1000::/home/wsl:/bin/bash
wsl1:x:1001:1001::/home/wsl1:/bin/bash
sed -i '1,15'd 删除文件里的1到15行 -i操作文件
[root@localhost grep]#wc -l passwd
21 passwd
[root@localhost grep]#sed -i '1,15'd passwd
[root@localhost grep]#wc -l passwd
6 passwd
sed -i '/laaa/'d a1.txt 删除文件里的有laaa字符的所有行
[root@localhost ~]# cat a1.txt
-bash: laaa: 未找到命令
a.txt
-bash: laaa: 未找到命令
a.txt
[root@localhost ~]# sed -i '/laaa/'d a1.txt
[root@localhost ~]# cat a1.txt
a.txt
a.txt
删除文件
sed '1,5s/root/rrtt/g' passwd root被替换成了rrtt,这里s表示替换的动作,g表示本行全局替换,使用方法和vim里的如出一辙
[root@localhost grep]#cat passwd |head -5
root:x:0:0:root:/root:/bin/bash
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
[root@localhost grep]#sed '1,5s/root/rrtt/g' passwd |head -5
rrtt:x:0:0:rrtt:/rrtt:/bin/bash
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
[root@localhost ~]# cat passwd1|head -10
root:x:0:0:root:/root:/bin/bash
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
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
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# sed -r '1,10s/ro+/p/g' passwd1 |head -10
pt:x:0:0:pt:/pt:/bin/bash
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
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
operator:x:11:0:operator:/pt:/sbin/nologin
前后调换,(.*)为贪婪匹配,会匹配到最后一个:
[root@localhost ~]# head -10 passwd1 |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
/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
/sbin/nologin:x:11:0:operator:/root:operator
[root@localhost ~]# head -10 passwd1
root:x:0:0:root:/root:/bin/bash
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
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
operator:x:11:0:operator:/root:/sbin/nologin
带斜杠/的需要区分开
[root@localhost ~]# head -4 passwd1 |sed 's@/sbin/nologin@123@g'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:123
daemon:x:2:2:daemon:/sbin:123
adm:x:3:4:adm:/var/adm:123
删除所有英文字母
[root@localhost ~]# head -4 passwd1 |sed 's/[a-zA-Z]//g'
::0:0::/://
::1:1::/://
::2:2::/://
::3:4:://://
所有行前面加字母
[root@localhost ~]# head passwd1 |sed -r 's/(.*)/aaa:&/'
aaa:root:x:0:0:root:/root:/bin/bash
aaa:bin:x:1:1:bin:/bin:/sbin/nologin
aaa:daemon:x:2:2:daemon:/sbin:/sbin/nologin
aaa:adm:x:3:4:adm:/var/adm:/sbin/nologin
aaa:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
aaa:sync:x:5:0:sync:/sbin:/bin/sync
aaa:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
aaa:halt:x:7:0:halt:/sbin:/sbin/halt
aaa:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
aaa:operator:x:11:0:operator:/root:/sbin/nologin