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

一、问题如下:

有如下文件
[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

转载于:https://my.oschina.net/stz/blog/726015

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值