码迷,mamicode.com
首页 > 系统相关 > 详细

linux笔记-027-sed

时间:2018-01-17 00:18:57      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:body   empty   五行   post   实验   sync   linux   查找   例子   

sed
准备工作:

root@am-01:~# mkdir sed
root@am-01:~# cp grep/passwd sed/test.txt
root@am-01:~# ls sed/
test.txt
root@am-01:~# cd sed/
root@am-01:~/sed# pwd
/root/sed

 

匹配带有root的行(-n)

root@am-01:~/sed# sed -n /root/p test.txt 
root:x:0:0:rooot:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

 

例子o+t,匹配+号左边的字符1次或多次的行打印出来(-r)

root@am-01:~/sed# sed -nr /o+t/p test.txt 
root:x:0:0:rooot:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

 

例子o{2},匹配带有连续两个o的行

root@am-01:~/sed# sed -nr /o{2}/p test.txt 
root:x:0:0:rooot:/root:/bin/bash
sadas:r.oooo
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

 

匹配包含root或者bus的行

root@am-01:~/sed# sed -nr /root|bus/p test.txt 
root:x:0:0:rooot:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin

 

打印第二行和打印第二行到第五行

root@am-01:~/sed# sed -n 2p test.txt 
bin:x:1:1:bin:/bin:/sbin/NOLogin
root@am-01:~/sed# sed -n 2,5p test.txt 
bin:x:1:1:bin:/bin:/sbin/NOLogin
sadas:r.oooo
dsgfgf:r1o:
daemon:x:2:2:daemon:/sbin:/sbin/nologin

 

打印第二十行到最后一行,$表示末行

root@am-01:~/sed# sed -n 20,$p test.txt 
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
aming:x:1000:1000::/home/aming:/bin/bash
ntp:x:38:38::/etc/ntp:/sbin/nologin
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
user3:x:1003:1005::/home/user3:/bin/bash
user4:x:1004:1005::/home/aming111:/sbin/nologin
user5:x:1005:1006::/home/user5:/bin/bash
user6:x:1007:1007::/home/user6:/bin/bash

 

同一个表达式做多个操作,可以加-e参数

root@am-01:~/sed# sed -e /root/p -e 1p -n test.txt 
root:x:0:0:rooot:/root:/bin/bash
root:x:0:0:rooot:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

 

匹配的时候不区分大小写

root@am-01:~/sed# vim test.txt #随便一行添加大写的BUS,便于做实验
dsgfgf:r1o:BUS
root@am-01:~/sed# sed -n /bus/Ip test.txt 
dsgfgf:r1o:BUS
dbus:x:81:81:System message bus:/:/sbin/nologin

 

把文件除了1-25行之外的都匹配出来,d是删除的意思(不会对文件本身做操作)

root@am-01:~/sed# sed 1,25d test.txt 
user3:x:1003:1005::/home/user3:/bin/bash
user4:x:1004:1005::/home/aming111:/sbin/nologin
user5:x:1005:1006::/home/user5:/bin/bash
user6:x:1007:1007::/home/user6:/bin/bash

 

选项-i会删除文件中指定的内容(会对文件本身做操作)

root@am-01:~/sed# sed -i 1,25d test.txt 
root@am-01:~/sed# wc -l test.txt 
4 test.txt

 

指定删除含有某个关键字的一行(会对文件本身做操作)

root@am-01:~/sed# sed -i /user3/d test.txt 
root@am-01:~/sed# cat test.txt 
user4:x:1004:1005::/home/aming111:/sbin/nologin
user5:x:1005:1006::/home/user5:/bin/bash
user6:x:1007:1007::/home/user6:/bin/bash

 

查找1-10行的root,替换为toor

root@am-01:~/sed# sed 1,10s/root/toor/g test.txt | head
toor:x:0:0:rooot:/toor:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOLogin
sadas:r.oooo
dsgfgf:r1o:
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

 

查找1-10行,无论+号左边的字符ro出现过1次或多次,都把它替换为r(切记在sed中有+号需要用-r参数)

root@am-01:~/sed# sed -r 1,10s/ro+/r/g test.txt | head
rt:x:0:0:rt:/rt:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOLogin
sadas:r.oooo
dsgfgf:r1o:
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

 

把1-10行的行首和行尾替换位置
这里每一个括号的内容跟后面的1/2/3相对应,其中(.*):指的是贪婪匹配到最后一个冒号的位置

root@am-01:~/sed# head test.txt| sed -r s/([^:]+):(.*):([^:]+)/\3:\2:\1/g
/bin/bash:x:0:0:rooot:/root:root
/sbin/NOLogin:x:1:1:bin:/bin:bin
sadas:r.oooo
dsgfgf:r1o:
/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

 

如果有多个斜杠或特殊符号就需要脱义

root@am-01:~/sed# head test.txt| sed s/\/sbin\/nologin/123/g
root:x:0:0:rooot:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOLogin
sadas:r.oooo
dsgfgf:r1o:
daemon:x:2:2:daemon:/sbin:123
adm:x:3:4:adm:/var/adm:123
lp:x:4:7:lp:/var/spool/lpd:123
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
root@am-01:~/sed# head test.txt| sed s@/sbin/nologin@123@g
root:x:0:0:rooot:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOLogin
sadas:r.oooo
dsgfgf:r1o:
daemon:x:2:2:daemon:/sbin:123
adm:x:3:4:adm:/var/adm:123
lp:x:4:7:lp:/var/spool/lpd:123
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

 

把英文字母都删除掉(不会对文件本身做操作)

root@am-01:~/sed# head test.txt | sed s/[a-zA-Z]//g
::0:0::/://
::1:1::/://
:.
:1:
::2:2::/://
::3:4:://://
::4:7::///://
::5:0::/://
::6:0::/://
::7:0::/://

 

在所有行前面加上固定的字符(\1和&的意思一样,有特殊符号需要加-r)

root@am-01:~/sed# head test.txt | sed -r s/(.*)/aaa:\1/g
aaa:root:x:0:0:rooot:/root:/bin/bash
aaa:bin:x:1:1:bin:/bin:/sbin/NOLogin
aaa:sadas:r.oooo
aaa:dsgfgf:r1o:
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
root@am-01:~/sed# head test.txt | sed -r s/(.*)/aaa:&/g
aaa:root:x:0:0:rooot:/root:/bin/bash
aaa:bin:x:1:1:bin:/bin:/sbin/NOLogin
aaa:sadas:r.oooo
aaa:dsgfgf:r1o:
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

linux笔记-027-sed

标签:body   empty   五行   post   实验   sync   linux   查找   例子   

原文地址:https://www.cnblogs.com/LZ0830/p/8297266.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!