免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2519 | 回复: 7
打印 上一主题 下一主题

[已解决]awk里是否可以通过正则匹配一段文本放到某变量中? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-07 15:35 |只看该作者 |倒序浏览
就像grep的-oP 参数那样,只匹配出正则指定的内容抓取出来,请问awk里有函数能做到吗?

另外,awk (gawk) 确定不支持 (?<= xxx) & (?= xxx) 这样的lookbehind符号吗?


我现在只能是不停的变量中转,再gsub,这样重复做好几次,浪费时间/工作量啊 :wink:

update: match($0,/regexp/,array) 这样的方式便可把结果抓到后面的数组中,其中array[0]为整个匹配串,[1]及后面的分别表式括号括处的匹配部分

[ 本帖最后由 pooronce 于 2008-10-8 14:37 编辑 ]

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
2 [报告]
发表于 2008-10-07 15:39 |只看该作者
原帖由 pooronce 于 2008-10-7 15:35 发表
就像grep的-oP 参数那样,只匹配出正则指定的内容抓取出来,请问awk里有函数能做到吗?

另外,awk (gawk) 确定不支持 (?


?= 这种东西只有perl支持吧?
如果你觉得awk不方便那就用grep或perl好了。

论坛徽章:
0
3 [报告]
发表于 2008-10-07 15:48 |只看该作者
awk的RS控制很方便啊。。。

看起来,难道我只好用Perl了么

论坛徽章:
0
4 [报告]
发表于 2008-10-07 15:55 |只看该作者
抱歉,再请教一下:

awk支持像sed等的那种括号替换法么: s/abc(.*)def/\1/
这一种,在awk中怎么实现呢

论坛徽章:
1
处女座
日期:2014-12-23 17:59:27
5 [报告]
发表于 2008-10-07 15:57 |只看该作者
原帖由 pooronce 于 2008-10-7 15:55 发表
抱歉,再请教一下:

awk支持像sed等的那种括号替换法么: s/abc(.*)def/\1/
这一种,在awk中怎么实现呢

不支持的.

不过可以通过substr 变通.

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
6 [报告]
发表于 2008-10-07 15:58 |只看该作者
原帖由 pooronce 于 2008-10-7 15:48 发表
awk的RS控制很方便啊。。。

看起来,难道我只好用Perl了么


perl不是也有$/可以控制?

gnu awk 的gensub 好象支持\1,你可以试试。

不如把你的需求说一说,论坛里这么多人,也许有你意想不到的方法。

论坛徽章:
0
7 [报告]
发表于 2008-10-07 16:20 |只看该作者
是搜索结果的一部份
需要把每条目的Location/Store的链接地址/Seller User ID/ 这三部份用TAB分开放到一行里

问题就在,一是很bt,主要内容全部在一行里(这一行里有46万个字符),二是这三部分数据不是每条目都有的,可能会有不同的缺失

笨办法的话,先切割成行出来后,再做二次处理。。。但我不想用
想找出方法来用较少时间一次处理成功 (因为有大量的类似htm要一起处理,时间消耗上是比较可观的)

[ 本帖最后由 pooronce 于 2008-10-8 15:23 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2008-10-08 14:38 |只看该作者
问题解决。。。
gensub不好用。。。或者说是我仍没学会怎么用吧,不知道为啥\x的方式是空的

但后来发现match很好用,能直接把正则匹配的内容抓到数组里,这样就比较好的解决了我的需要了 >_<
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP