awk 和 WinGrep 中的正则表达式
Posted
技术标签:
【中文标题】awk 和 WinGrep 中的正则表达式【英文标题】:RegEx in awk and WinGrep 【发布时间】:2010-09-21 03:45:14 【问题描述】:所以我正在寻找这样的模式:
大小='0x0'
在日志文件中,但我只对大尺寸(4 位或更多)感兴趣。以下正则表达式在 EditPadPro(好工具 BTW)中效果很好
size='0x[0-9a-fA-F]4,
但是相同的 RegEx 在 awk 中不起作用 - 似乎重复 4,
搞砸了。与 WinGrep 相同 - 来自 RegEx 专家的任何想法?谢谢!
【问题讨论】:
如果@adamalex 的答案有效,您应该将其标记为正确,这既是为了他的利益,也是为了下一个需要回答这个问题的人。 您可以使用 PowerGREP 代替 WinGrep,因此您将使用与 EditPad Pro 完全相同的正则表达式引擎。 【参考方案1】:您实际上可以使用 awk,但要注意。
如下页所述,您需要一个特殊的命令行选项 (--re-interval) 才能使其生效,因为间隔表达式(4,)不在标准中:
http://kansai.anesth.or.jp/gijutu/awk/gawk/gawk_28.html
所以最后,你会想要这样的东西:
awk --re-interval "/size='0x[0-9a-fA-F]4,'/" thefile
这将打印出匹配的行。
【讨论】:
那不是'awk';它是 GNU 'gawk',它不是唯一的版本。话虽如此,在 Windows 上,'awk' 很可能来自 GNU,尤其是因为它是公认的答案,但这不是自动的(我相信 MKS 有一个 awk 版本)。 考虑到 GNU 实用程序的普遍性,我认为这至少是一个不错的起点。既然它起作用了,看起来我的假设是正确的。 ;-)【参考方案2】:我不知道 4, 语法有什么优雅的替代方法,但如果它不能在您想要的环境中工作,您可以求助于这个丑陋的 hack:
size='0x[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]+
希望这会有所帮助!
亚当
【讨论】:
不错 - 丑陋的 hack 效果很好,这才是最重要的,对吧?对我来说,好处是学习了一个新工具,而不是编写另一个 C 应用程序!【参考方案3】:不要忘记最后一个撇号。
'
【讨论】:
以上是关于awk 和 WinGrep 中的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章