【问题标题】:Problem with removing a dot from unix timestamp in Apache NiFi从 Apache NiFi 中的 unix 时间戳中删除点的问题
【发布时间】:2018-09-07 10:24:43
【问题描述】:

我在日志中得到输入:

1518442283.483 161 127.0.0.1 TCP_MISS/200 103701 GET http://www.cnn.com/ matt DIRECT/199.27.79.73 text/html

但我必须以这种形式拥有它:

1518442283483 161 127.0.0.1 TCP_MISS/200 103701 GET http://www.cnn.com/ matt DIRECT/199.27.79.73 text/html

我需要使用 regex

从 unix 时间戳中删除点

感谢您的帮助!

【问题讨论】:

  • 你试过什么?什么没用?你得到了什么?你期待什么?
  • 我希望在我的日志中进行此更改:1518442283.483 → 1518442283483

标签: regex logging timestamp apache-nifi


【解决方案1】:

尝试使用以下 替换文本 配置:

搜索价值

(.*?)\.(.*)

重置价值

$1$2

输入:

1518442283.483 161 127.0.0.1 TCP_MISS/200 103701 GET http://www.cnn.com/ matt DIRECT/199.27.79.73 text/html

输出:

1518442283483 161 127.0.0.1 TCP_MISS/200 103701 GET http://www.cnn.com/ matt DIRECT/199.27.79.73 text/html

【讨论】:

    【解决方案2】:

    . 是正则表达式中的特殊字符,表示任何字符。要使用文字点,必须通过反斜杠 (\.) 将其转义。根据使用情况/使用的语言,可能需要更多转义字符/反斜杠。

    【讨论】:

    • 当我使用这个正则表达式时,整个日志中的所有点都将被删除,我的目标是只删除遇到的第一个点。
    • 指示的行是代码中的唯一行吗?格式总是像 10 位点 3 位空格吗?可能需要细化正则表达式。显示您用于过滤器的代码以及(部分)输入文件。
    • 也许一些关于您为什么需要更改的信息也可能有用。
    • 好的,当然。我在 Hortonworks Data Platform 集群中使用我的解决方案。支持这种情况的服务是 Apache NiFi。输入数据是上面给出的日志。然后它将它分离,以便它可以为 Hive 数据库提供动力。 unixtimestamp 日期将始终具有相同数量的字符,即 XXXXXXXXXX.XXX。为了处理输入数据,我需要删除第 10 个字符后的点。
    • 所以也许像s/\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\)\.\([0-9][0-9][0-9]\)/\1\2/这样的正则表达式。您是否有机会在执行正则表达式时使用了“g”(全局)选项?如果是这样,请非常小心。
    猜你喜欢
    • 2023-01-02
    • 2015-01-20
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多