ruby中在终端命令行上调试grok表达式
来源: 阅读:1651 次 日期:2014-10-30 08:27:05
温馨提示: 小编为您整理了“ruby中在终端命令行上调试grok表达式”,方便广大网友查阅!

用 logstash 的人都知道在 http://grokdebug.herokuapp.com 上面调试 grok 正则表达式。现在问题来了:翻墙技术哪家强? 页面中用到了来自 google 域名的 js 文件,所以访问经常性失败。所以,在终端上通过命令行方式快速调试成了必需品。

其实在 logstash 还在 1.1 的年代的时候,官方 wiki 上是有一批专门教大家怎么通过 irb 交互式测试 grok 表达式的。但不知道为什么后来 wiki 这页没了…… 好在代码本身不复杂,稍微写几行脚本,就可以达到目的了:

代码如下

#!/usr/bin/env ruby

require 'rubygems'

gem 'jls-grok', '=0.11.0'

require 'grok-pure'

require 'optparse'

require 'ap'

options = {}

ARGV.push('-h') if ARGV.size === 0

OptionParser.new do |opts|

opts.banner = 'Run grokdebug at your terminal.'

options[:dirs] = %w(patterns)

options[:named] = false

opts.on('-d DIR1,DIR2', '--dirs DIR1,DIR2', Array, 'Set grok patterns directories. Default: "./patterns"') do |value|

options[:dirs] = value

end

opts.on('-m MESSAGE', '--msg MESSAGE', 'Your raw message to be matched') do |value|

options[:message] = value

end

opts.on('-p PATTERN', '--pattern PATTERN', 'Your grok pattern to be compiled') do |value|

options[:pattern] = value

end

opts.on('-n', '--named', 'Named captures only') do

options[:named] = true

end

end.parse!

grok = Grok.new

options[:dirs].each do |dir|

if File.directory?(dir)

dir = File.join(dir, "*")

end

Dir.glob(dir).each do |file|

grok.add_patterns_from_file(file)

end

end

grok.compile(options[:pattern], options[:named])

ap grok.match(options[:message]).captures()

测试一下:

代码如下

$ sudo gem install jls-grok awesome_print

$ ruby grokdebug.rb

Run grokdebug at your terminal.

-d, --dirs DIR1,DIR2 Set grok patterns directories. Default: "./patterns"

-m, --msg MESSAGE Your raw message to be matched

-p, --pattern PATTERN Your grok pattern to be compiled

-n, --named Named captures only

$ ruby grokdebug.rb -m 'abc123' -p '%{NUMBER:test}'

{

"test" => [

[0] "123"

],

"BASE10NUM" => [

[0] "123"

]

}

$ ruby grokdebug.rb -m 'abc123' -p '%{NUMBER:test:float}' -n

{

"test" => [

[0] 123.0

]

}

没错,我这比 grokdebug 网站还多了类型转换的功能。它用的 jls-grok 是 0.10.10 版,而我用的是最新的 0.11.0 版。

更多信息请查看IT技术专栏

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map