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 如需转载请自行联系原作者