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 中的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

对于Linux正则表达式在sed awk 过滤中的深入浅出

正则表达式学习之grep,sed和awk

awk在正则表达式中的使用

Linux学习(二十五)正则表达式awk

awk从入门到入土正则匹配

awk中如何用正则表达式判断某位数值的位数?