用awk获得匹配的正则表达式,完成Perl中的功能

2016-08-03 13:47:26来源:oschina作者:08048000人点击

一、问题如下:


有如下文件[root@localhost ~]# cat file123a4wk123123a3wk1234[root@localhost ~]#在perl中,可以用“()”来表示模式内存。


Perl code

open
(FD
,
file) or
die
;
while
(
<
FD
>
) {
/
(a
.
wk)
/
;
print
$
1
; }

可以获得file文件中的a4wk和a3wk两个字符串,但是这个功能怎么用awk实现呢?


二、解决方法: 使用match内嵌函数1)在awk中可以使用match函数,其原型如下:


match(s, r [, a])其中s是要匹配的串,r是正则表达式,a是数组;


例子如下例子1、用来获得IP地址:[root@localhost ~]# ifconfig |awk --re-interval '{match($0,/([0-9]{1,3}/.){3}[0-9]{1,3}/,a) ;print a[0]}'192.168.1.104 127.0.0.1 [root@localhost ~]#其中--re-interval是必须加的,因为使用了量词{m,n}; 2)match的详细用法举例,[root@localhost ~]# echo foooobazbarrrrr | gawk '{ match($0, /(fo+).+(bar*)/, arr) > print arr[1], arr[2]> print arr[1, "start"], arr[1, "length"]> print arr[2, "start"], arr[2, "length"]> }'foooo barrrrr1 59 7

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台