天天看点

linux sed

sed 工具的使用

grep实现的功能是只是查找功能,而sed能够查找替换

sed命令的格式为:sed -n 'n'p filename,单引号内的n表示一个数字,表示第几行。-n选项的作用只是显示我们要打印的行,无关紧要的内容不显示

[root@localhost sed]# sed -n '2'p test.txt  #打印第二行  (打印指定的行)

bin:x:1o:1:bin:/bin:/sbin/NOLoginooo

[root@localhost sed]# sed '2'p test.txt    #不加-n 结果是打印全部的行

root:x:0:0:root:/root:/bin/bash

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/vaoooo/spool/lpd:/sbin/nologin

[root@localhost sed]# sed -n '1,4'p test.txt  # 打印一个区间

[root@localhost sed]# sed -n '1,$'p test.txt #打印所有的行

[root@localhost sed]# sed -n '/root/'p test.txt  #匹配root 并打印出来

operator:x:11:0:operator:/root:/sbin/nologin

[root@localhost sed]# sed -n '/r.t/'p test.txt  #. 表示任意一个字符,这里表示打 印以r开头,中间任意,结尾为t的行

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

[root@localhost sed]# sed -n '/o\+t/'p test.txt  #+表示1个或多个字符

[root@localhost sed]# sed -nr '/o+t/'p test.txt  #如果不想使用\脱义符号就必须在sed中加-rn或是-nr

[root@localhost sed]# sed -n '/ro*/'p test.txt  #*表示0个或多个字符

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

polkitd:x:999:998:User for polkitd:/:/sbin/nologin

[root@localhost sed]# sed -e '1'p -e '/bus/'p -n test.txt  #打印1行并匹配bus项

dbus:x:81:81:System message bus:/:/sbin/nologin

[root@localhost sed]# sed -n '/bus/'Ip test.txt  #I表示在sed忽滤大小写

[root@localhost sed]# sed '1,15'd test.txt   #d 删除行  并打印剩下的行  它只是删除屏幕上显示的行,并未删除文件内容

avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin

avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

[root@localhost sed]# wc -l test.txt1    # -i 直接删除文件的行

20 test.txt1

[root@localhost sed]# sed -i '1,15'd test.txt

[root@localhost sed]# sed -i '1,15'd test.txt1

[root@localhost sed]# wc -l test.txt1

5 test.txt1

[root@localhos

[root@localhost sed]# sed '1,4s/root/toor/g' test.txt  # S为替换,把1到4行的root全部替换为toor

toor:x:0:0:toor:/toor:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

[root@localhost sed]# head test.txt |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 sed]# head test.txt |sed 's/[a-zA-Z]//g' #把所有的字母删除  实际是把字母变为空

::0:0::/://

::1:1::/://

::2:2::/://

::3:4:://://

::4:7::///://

::5:0::/://

::6:0::/://

::7:0::/://

::8:12::///://

::11:0::/://

[root@localhost sed]# head test.txt |sed -r 's/(.*)/aaa:&/'   #在行的前面加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

本文转自 yzllinux博客,原文链接:    http://blog.51cto.com/12947851/2061834    如需转载请自行联系原作者