【问题标题】:Ruby Filter gsub replace \\nRuby 过滤器 gsub 替换 \\n
【发布时间】:2018-12-26 07:34:51
【问题描述】:

我想将 '\\n' 替换为 '\n'

我正在使用 gsub 方法但无法替换

ruby
{

code => "@mystring=event.get('stockLines');
@mystring=@mystring.gsub('\\\n', '\n');"

}

【问题讨论】:

  • 我不明白为什么除了“ruby”之外还有三个标签。如果它们不相关——我不明白它们为什么会——它们不应该被包括在内。标签用于协助搜索。如果成员想要检查与 logstash 等有关的问题,他们是否希望看到这个问题?

标签: ruby elasticsearch logstash kibana


【解决方案1】:

您需要在 gsub 中使用“\n”而不是“\n”。不同的引号表现不同。

Read more

在你的情况下:

@mystring.gsub("\\n", "\n")

两种文字形式的字符串(单引号或双引号)的本质区别在于双引号允许转义序列,而单引号则不允许!

【讨论】:

    【解决方案2】:

    反斜杠的转义可能有点奇怪。

    对于常规的 Ruby 脚本,代码如下:

    @mystring = event.get('stockLines').gsub('\\\\\n', '\n')
    

    似乎在logstash配置中代码也在一个字符串中,所以它需要再次转义,即:

    ruby
    {
    code => "@mystring = event.get('stockLines').gsub('\\\\\\\\\\n', '\\n');"
    }
    

    【讨论】:

    • 我试过了,它不能替代。你确定你的意思是gsub!。不是 gsub。
    • gsub! 就地替换。 @mystring.gsub!(...);@mystring = @mystring.gsub(...); 相同。
    • 我都试过了,它不能代替。我在字符串中得到相同的 \\n。
    • ruby -e "foo = '\\\\\n'; puts foo; puts foo.gsub('\\\\\n', '\n')" -- 为我工作。
    • 我正在写问题中提到的logstash脚本。它在那里不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多