sed工具

sed
是流编辑器,这个大家应该都知道,就是不需要进入交互模式也能对文本进行编辑

就说一下常用的格式

sed
的用法:
sed
参数 '命令' 文件名

例子:

sed -n '1p' /etc/passwd 表示打印该文件第1行 -n为显示输出,p为打印匹配行
[root@dililand ~]# sed -n '1p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@dililand ~]# cat abc
aaaa
dddd
rrrr
[root@dililand ~]# sed '1p' abc
aaaa
aaaa
dddd
rrrr

表示不仅打印第1行,还显示其它内容


[root@dililand ~]# cat abc
aaaa
dddd
rrrr
iiiiiii
[root@dililand ~]# sed -n '1,3p' abc
aaaa
dddd
rrrr

表示打印该文件第2到第5行内容


sed -n '/关键字/p' 文件名表示打印该文件的关键字的行

如:[root@dililand ~]# cat test
squid:x:23:23::/var/spool/squid:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
leon:x:500:500::/home/leon:/bin/bash
tom:x:501:501::/home/tom:/bin/bash
[root@dililand ~]# sed -n '/leon/p' test
leon:x:500:500::/home/leon:/bin/bash

-e为多命令的传递

[root@dililand ~]# sed -n -e '/leon/p' -e '/leon/=' test
leon:x:500:500::/home/leon:/bin/bash
4

此为把文件含有leon关键字打印出来,且显示出在哪一行


注意:sed不支持多编辑命令的用法,如 sed -n '/leon/p=' 这样格式是错误的


多命令的格式应用为:sed [选项] -e 命令1 e 命令2 ……-e 命令n /etc/passwd


追加文本格式: sed '指定地址 a\text' 文件名


如: sed '/leon/ a\hello show me'/etc/passwd 这样会在关键字leon这一行的下一行插入hello show me 这句内容,但只是打印显示效果,原文件是没有更改的


说明一下,sed除了加上-i参数外,其余一律只作打印显示,不会对原文件作为任何修改

若要匹配文本内容有无字符,如".""$"


sed -n '/\./p' /etc/passwd .
要用\转义为普通字符才可以匹配这个关键字


若有多个元字符,可以用-e表示


sed -n -e '/\$/p' -e '/\./p' -e '/\?/p' /etc/passwd

这样可以打印出含有 . $ ? 字符的行的内容出来



[root@dililand ~]# cat abc
aaaa
dddd
rrrr
iiiiiii
[root@dililand ~]# sed -n '$p' abc
iiiiiii

打印显示最后一行内容


[root@dililand ~]# cat abc
aaaa
dddd
rrrr
iiiiiii
[root@dililand ~]# sed -n '/.*aa/p' abc
aaaa

打印含有以aa结尾的字符行


取反!

[root@dililand ~]# cat abc
aaaa
dddd
rrrr
iiiiiii
[root@dililand ~]# sed -n '1,2!p' abc
rrrr
iiiiiii

文件里不打印12行内容


[root@dililand ~]# cat abc
aaaa
dddd
mysql
rrrr
iiiiiii
[root@dililand ~]# sed -n '/mysql/,$p' abc
mysql
rrrr
iiiiiii

打印mysql关键的行直到最后一行为止


[root@dililand ~]# cat abc
aaaa
dddd
mysql
rrrr
iiiiiii
[root@dililand ~]# sed -n '2,/mysql/p' abc
dddd
mysql

打印第2行到匹配mysql字符的行


组合使用
ifconfig eth0 |sed -n '/inet addr/,4p' 先显示ifconfig eth0的结果,再打印inet addr的关键字行到第4

[root@dililand ~]# ifconfig eth0 | sed -n '/inet addr/,4p'
          inet addr:192.168.1.104  Bcast:255.255.255.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fee1:61d9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

先介绍到这,还有后续的