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
文件里不打印1-2行内容
[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
先介绍到这,还有后续的