【问题标题】:How remove first 24 characters from log using gsub?如何使用 gsub 从日志中删除前 24 个字符?
【发布时间】:2016-08-04 12:44:27
【问题描述】:

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

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

我只想要以下内容:

[DEBUG] Rector: Common\BasePage, OnInit BEGIN

【问题讨论】:

  • 请阅读“How to Ask”。我们希望看到您为解决问题所做的努力,否则您似乎希望我们为您编写代码。另外,为什么一定要gsub?有更好的方法来做到这一点。 stackoverflow.com/q/3614389/128421 密切相关。

标签: ruby logstash gsub


【解决方案1】:

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】:
    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."
    

    【讨论】:

      【解决方案3】:

      这将删除 gsub 的前 24 个字符。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-17
        • 1970-01-01
        • 2012-07-31
        • 2019-03-14
        • 2019-01-01
        • 1970-01-01
        • 2019-06-16
        • 2012-07-13
        相关资源
        最近更新 更多