如何使用gsub从日志中删除前24个字符?

时间:2016-08-04 12:44:27

标签: ruby logstash gsub

如何使用gsub删除前24个字符?

2016-08-03 09:49:07,701 [DEBUG] Rector: Common\BasePage, OnInit BEGIN.

我只想要以下内容:

[DEBUG] Rector: Common\BasePage, OnInit BEGIN

3 个答案:

答案 0 :(得分:2)

line = "2016-08-03 09:49:07,701 [DEBUG] Rector: Common\BasePage, OnInit BEGIN."

删除第一个[之前的所有内容:

# Note the use of #sub instead of #gsub, as it will only match once
line.sub /\A[^\[]*/, ''
# => "[DEBUG] Rector: CommonBasePage, OnInit BEGIN."

您还可以使用正则表达式进行索引,以获取第一个[

中的所有内容
line[/\[.*/]
# => "[DEBUG] Rector: CommonBasePage, OnInit BEGIN."

如果您知道时间戳前缀总是24个字符,请使用切片:

line[24..-1]
# => "[DEBUG] Rector: CommonBasePage, OnInit BEGIN."

答案 1 :(得分:2)

gsub对于在字符串开头删除n个字符不是一个好选择。你应该简单地提取字符并继续前进,而不是进行搜索和替换以取出字符。

删除字符的最简单方法是分配给字符串切片:

str = 'foo bar'
str[0, 4] = ''
str # => "bar"

或者,您可以从字符串中剪切并提取字符:

str = 'foo bar'
str[4 .. -1] # => "bar"

如果您因为发现没有使用足够的CPU时间而放慢代码速度,可以使用正则表达式:

str = 'foo bar'
str[/^.{4}(.+)/, 1] # => "bar"

如果坚持使用gsub

str = 'foo bar'
str.gsub(/^.{4}/, '') # => "bar"

但是,使用gsub并不像sub那样快速或有效,它会做同样的事情:

str = 'foo bar'
str.sub(/^.{4}/, '') # => "bar"

答案 2 :(得分:0)

这会删除gsub之前的前24个字符。

'2016-08-03 09:49:07,701 [DEBUG] Rector: Common\BasePage, OnInit BEGIN.'.gsub(/\A.{24}/, '')
# => "[DEBUG] Rector: Common\\BasePage, OnInit BEGIN."