【问题标题】:Take part of the string using bash [duplicate]使用 bash 获取部分字符串 [重复]
【发布时间】:2014-12-20 01:15:09
【问题描述】:

我有来自日志文件的关于发送代码的字符串,例如:

 <timestamp> INFO   [Response--22] Code [00000000] Code was sent to [+0000002345]

您能帮我使用 BASH 解析它以将代码值 (8chars) 放入变量中吗? 感谢您的帮助。

【问题讨论】:

  • 你能提供预期的输出吗?
  • 您是否已经尝试过?请详细说明您的目标!
  • 预期输出为:从字符串“ INFO [Response--22] Code [00000000] Code is sent to [+0000002345]”中提取的'code = 00000000'
  • 您应该编辑您的问题以包含预期的输出。
  • @TomFenech 我希望有更好的工具来查找可能的重复项;如果您可以提出更好的副本,请这样做。可能有数百个,但要找到一个好的是一项艰巨的工作。

标签: linux bash parsing git-bash


【解决方案1】:

您可以使用 sed 提取值:

sed 's/.*Code *\[\([0-9]*\)].*/\1/' <<<"<timestamp> INFO   [Response--22] Code [00000000] Code was sent to [+0000002345]"
00000000

如果该行在文件中,您可以使用sed '...' filename。要将输出存储到变量中,您可以使用x=$(sed '...' filename)

【讨论】:

    【解决方案2】:
    sed -r 's/(.*)(Code )\[([0-9]+)\](.*)/code = \3/'
    

    输出:

    sdlcb@ubuntu:~/AMD_C$ echo "<timestamp> INFO   [Response--22] Code [00000000] Code was sent to [+0000002345]" | sed -r 's/(.*)(Code )\[([0-9]+)\](.*)/code = \3/'
    code = 00000000
    

    【讨论】:

      【解决方案3】:

      如果我正确理解了您的要求:

      $ x="<timestamp> INFO   [Response--22] Code [00000000] Code was sent to [+0000002345]"
      $ echo "$x" | sed -r 's/.*(Code )\[([0-9]+)\].*/\1= \2/'
      Code = 00000000
      

      【讨论】:

      • 你应该在回显时引用"$x"
      • 非常感谢。抱歉转储询问方式。
      • @TomFenech:感谢汤姆指出。更新
      【解决方案4】:
      x='<timestamp> INFO   [Response--22] Code [00000000] Code was sent to [+0000002345]'
      read -a fields <<<"$x"
      code=${fields[4]//[][]/}
      echo "code=$code"
      

      【讨论】:

        猜你喜欢
        • 2013-08-12
        • 2019-10-30
        • 1970-01-01
        • 2011-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-28
        相关资源
        最近更新 更多