3i就是insert插入的意思,在第3行前追加一行
[root@bogon ~]# sed '3i 222' b.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
222
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@bogon ~]#
sed可以正则定位
删root开头的行
[root@bogon ~]# sed '/^root/d' b.txt
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@bogon ~]#
第1行删除
[root@bogon ~]# sed '1d' b.txt
第1行和第3行删除
[root@bogon ~]# sed '1d;3d' b.txt
删除1-3行
[root@bogon ~]# sed '1,3d' b.txt
[root@bogon ~]# touch c.txt
[root@bogon ~]# vim c.txt
[root@bogon ~]# cat c.txt
1root
2tom
3egon
4alex
5wupeiq
6yuanhao
7sb
8sb2
[root@bogon ~]# sed '/sb$/d' c.txt
1root
2tom
3egon
4alex
5wupeiq
6yuanhao
8sb2
[root@bogon ~]#
包含sb的都删除
[root@bogon ~]# sed '/sb/d' c.txt
1root
2tom
3egon
4alex
5wupeiq
6yuanhao
[root@bogon ~]# sed '/sb.*$/d' c.txt
1root
2tom
3egon
4alex
5wupeiq
6yuanhao
[root@bogon ~]#
2开头的行,改为111
[root@bogon ~]# sed '/^2/c 111' c.txt
1root
111
3egon
4alex
5wupeiq
6yuanhao
7sb
8sb2
[root@bogon ~]#
把全部都改为111
[root@bogon ~]# sed 'c 111' c.txt
111
111
111
111
111
111
111
111
[root@bogon ~]#
最常用的命令是:
替换把root还ROOT(如果一行有多个,只改第一个)
[root@bogon ~]# sed 's/root/ROOT/' c.txt
1ROOTroot
2tom
3egon
4alex
5wupeiq
6yuanhao
7sb
8sb2
[root@bogon ~]#
一行出现多个,也可以替换:
[root@bogon ~]# sed 's/root/ROOT/g' c.txt
1ROOTROOT
2tom
3egon
4alex
5wupeiq
6yuanhao
7sb
8sb2
[root@bogon ~]#
第1个字符是数字,第2个是字母的字符串中,把sb改为SB,/s意思是修改每行的第一个,/g是同一行有多个sb就全部都改SB
[root@bogon ~]# sed '/^[0-9][a-Z]/s/sb/SB/g' c.txt
1rootroot
2tom
3egon
4alex
5wupeiq
6yuanhao
7SB
8SB2
[root@bogon ~]#
sed -r等于扩展,记住这个
我只想把4alexsb换成4alexSB;[root@bogon ~]# sed -r 's/要换什么/换成什么/g' c.txt
[root@bogon ~]# sed -r '/^[0-9]([a-Z]+)sb$/ s/sb/SB/g' c.txt
1rootroot
2tom
3egon
4alexSB
5wupeiq
6yuanhao
7sb
8sb2
[root@bogon ~]#
我想把冒号前面的都删掉
[root@bogon ~]# cat b.txt
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 123()17 :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@bogon ~]#
匹配字母多个,一个非字母
[root@bogon ~]# sed -r 's/^([a-Z]+)([^a-Z])//g' b.txt
x:0:0:root:/root:/bin/bash
x:1:1:bin:/bin:/sbin/nologin
x:2:2:daemon:/sbin:/sbin/nologin
x:3:4:adm:/var/adm:/sbin/nologin
123()17 :x:4:7:lp:/var/spool/lpd:/sbin/nologin
x:5:0:sync:/sbin:/bin/sync
x:6:0:shutdown:/sbin:/sbin/shutdown
x:7:0:halt:/sbin:/sbin/halt
x:8:12:mail:/var/spool/mail:/sbin/nologin
x:11:0:operator:/root:/sbin/nologin
[root@bogon ~]#
只取第1部分:([a-Z]+)
[root@bogon ~]# sed -r 's/^([a-Z]+)([^a-Z])/\1/g' b.txt
rootx:0:0:root:/root:/bin/bash
binx:1:1:bin:/bin:/sbin/nologin
daemonx:2:2:daemon:/sbin:/sbin/nologin
admx:3:4:adm:/var/adm:/sbin/nologin
lp 123()17 :x:4:7:lp:/var/spool/lpd:/sbin/nologin
syncx:5:0:sync:/sbin:/bin/sync
shutdownx:6:0:shutdown:/sbin:/sbin/shutdown
haltx:7:0:halt:/sbin:/sbin/halt
mailx:8:12:mail:/var/spool/mail:/sbin/nologin
operatorx:11:0:operator:/root:/sbin/nologin
只取第2部分:([^a-Z])
[root@bogon ~]# sed -r 's/^([a-Z]+)([^a-Z])/\2/g' b.txt
:x:0:0:root:/root:/bin/bash
:x:1:1:bin:/bin:/sbin/nologin
:x:2:2:daemon:/sbin:/sbin/nologin
:x:3:4:adm:/var/adm:/sbin/nologin
123()17 :x:4:7:lp:/var/spool/lpd:/sbin/nologin
:x:5:0:sync:/sbin:/bin/sync
:x:6:0:shutdown:/sbin:/sbin/shutdown
:x:7:0:halt:/sbin:/sbin/halt
:x:8:12:mail:/var/spool/mail:/sbin/nologin
:x:11:0:operator:/root:/sbin/nologin
[root@bogon ~]#
最后一个单词不要
[root@bogon ~]# sed -r 's/([a-Z]+)$//g' b.txt
root:x:0:0:root:/root:/bin/
bin:x:1:1:bin:/bin:/sbin/
daemon:x:2:2:daemon:/sbin:/sbin/
adm:x:3:4:adm:/var/adm:/sbin/
lp 123()17 :x:4:7:lp:/var/spool/lpd:/sbin/
sync:x:5:0:sync:/sbin:/bin/
shutdown:x:6:0:shutdown:/sbin:/sbin/
halt:x:7:0:halt:/sbin:/sbin/
mail:x:8:12:mail:/var/spool/mail:/sbin/
operator:x:11:0:operator:/root:/sbin/
[root@bogon ~]#
也可以
[root@bogon ~]# sed -r 's/([^a-Z])([a-Z]+)$/\1/g' b.txt
root:x:0:0:root:/root:/bin/
bin:x:1:1:bin:/bin:/sbin/
daemon:x:2:2:daemon:/sbin:/sbin/
adm:x:3:4:adm:/var/adm:/sbin/
lp 123()17 :x:4:7:lp:/var/spool/lpd:/sbin/
sync:x:5:0:sync:/sbin:/bin/
shutdown:x:6:0:shutdown:/sbin:/sbin/
halt:x:7:0:halt:/sbin:/sbin/
mail:x:8:12:mail:/var/spool/mail:/sbin/
operator:x:11:0:operator:/root:/sbin/
把第1个单词和第2个单词调换
[root@bogon ~]# sed -r 's/^([a-Z]+)([^a-Z])([a-Z]+)([^a-Z])/\3\2\1\4/g' b.txt
x:root:0:0:root:/root:/bin/bash
x:bin:1:1:bin:/bin:/sbin/nologin
x:daemon:2:2:daemon:/sbin:/sbin/nologin
x:adm:3:4:adm:/var/adm:/sbin/nologin
lp 123()17 :x:4:7:lp:/var/spool/lpd:/sbin/nologin
x:sync:5:0:sync:/sbin:/bin/sync
x:shutdown:6:0:shutdown:/sbin:/sbin/shutdown
x:halt:7:0:halt:/sbin:/sbin/halt
x:mail:8:12:mail:/var/spool/mail:/sbin/nologin
x:operator:11:0:operator:/root:/sbin/nologin
[root@bogon ~]#
删除每行第一个字符
[root@bogon ~]# sed -r 's/^(.)(.*)$/\2/' b.txt
oot:x:0:0:root:/root:/bin/bash
in:x:1:1:bin:/bin:/sbin/nologin
aemon:x:2:2:daemon:/sbin:/sbin/nologin
dm:x:3:4:adm:/var/adm:/sbin/nologin
p 123()17 :x:4:7:lp:/var/spool/lpd:/sbin/nologin
ync:x:5:0:sync:/sbin:/bin/sync
hutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
alt:x:7:0:halt:/sbin:/sbin/halt
ail:x:8:12:mail:/var/spool/mail:/sbin/nologin
perator:x:11:0:operator:/root:/sbin/nologin
[root@bogon ~]#
不要倒数第二个单词
[root@bogon ~]# sed -r 's/([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)$/\1\3\4/' b.txt
root:x:0:0:root:/root://bash
bin:x:1:1:bin:/bin://nologin
daemon:x:2:2:daemon:/sbin://nologin
adm:x:3:4:adm:/var/adm://nologin
lp 123()17 :x:4:7:lp:/var/spool/lpd://nologin
sync:x:5:0:sync:/sbin://sync
shutdown:x:6:0:shutdown:/sbin://shutdown
halt:x:7:0:halt:/sbin://halt
mail:x:8:12:mail:/var/spool/mail://nologin
operator:x:11:0:operator:/root://nologin
sed -ri就会直接改了文件了
先弄-r,备份一下,否则-ri错了就错了
也可以
sed -r 's/([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)$/\1\3\4/' b.txt >> cc.txt
^[^1234b]意思是开头不是1或2或3或4或b的字符串
Sed /i 插入
Sed /p 打印
Sed /d 删除
Sed /c 替换
Sed -o 行数
Sed -I 直接修改文件
Sed -r 扩展命令
Sed -r ‘s///g’ /etc/passwd 把一些字符换成别的字符,g是一行中只要出现某字符就改,如果只改第2行,就‘2s///g’
管道符有先执行,后执行的能力:
[root@bogon ~]# egrep -v '^#' c.txt | egrep -v '^ *$'
1rootroot
2tom
3egon
4alexsb
5wupeiq
6yuanhao
7sb
8sb2
[root@bogon ~]#
只改第4行的sb为root
[root@bogon ~]# sed -r '4s/sb/root/g' c.txt
1rootroot
2tom
3egon
4alexroot
5wupeiq
6yuanhao
7sb
8sb2
[root@bogon ~]#