一、问题如下:
有如下文件
[root@localhost ~]# cat file
123a4wk123
123a3wk1234
[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 barrrrr
1 5
9 7