代码之家  ›  专栏  ›  技术社区  ›  user1692342

无法从日志文件中提取精确的键值对

  •  0
  • user1692342  · 技术社区  · 6 年前

    someRandomText... ,"interestingKey":"interestingValue",moreRandomText
    

    为了这个我试过了 zgrep -o -i '"interestingKey":[^ ]*' logs* 即使它找到了相关的行,它也会在行上的grepped模式前后输出文本。

    是否有一种方法可以将结果仅限于键值对。有没有一种方法也可以将感兴趣的值过滤到那些只有数字而没有字母的值?

    注意:密钥必须不区分大小写。钥匙总是一样的。价值总是不同的。

    4 回复  |  直到 6 年前
        1
  •  2
  •   glenn jackman    6 年前

    你想要:

    zgrep -oiP '"interestingKey":"\K[^"]*' 
    

    会的 在引号中查找关键字名称,后跟冒号和值的开头引号。
    然后 \K 指令“忘记”到目前为止匹配的文本。
    然后我们匹配一些非报价字符 -o

        2
  •  1
  •   iamauser    6 年前

    使用 grep here

    $ echo 'someRandomText... ,"interestingKey":"interestingValue",moreRandomText' | grep -oP '(?<=interestingKey":).*(?=,)'
    "interestingValue"
    

    为了一个文件,

    $ grep -oP '(?<=interestingKey":).*(?=,)' inputFile
    

    你可以用 zgrep 而不是 格雷普

        3
  •  0
  •   karakfa    6 年前

    另一个,

    $ ... | grep -oP '(?<=interestingKey":)[^,]+'
    

    你甚至可以去掉引号,如果你把它作为比赛的一部分。

        4
  •  0
  •   Jotne    6 年前

    可以用 awk

    awk -F, '{for(i=1;i<=NF;i++)if($i~/interestingKey/)print $(i+1)}' file
    moreRandomText
    

    因为它在所有的元素中循环,所以它有些慢。