您的位置:首页 > 其它

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

2016-08-02 00:00 971 查看
一、问题如下:

有如下文件
[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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: