代码之家  ›  专栏  ›  技术社区  ›  Deepak Singhal

Grep用于行中的多个值并仅输出多个值

  •  1
  • Deepak Singhal  · 技术社区  · 7 年前

    假设我们有键值对,如:

    ts=2017-06-27-19-59-13-036 | result=SUCCESS | requestId=xyz | elapsed=49
    

    我希望输出类似于: 结果=成功|经过=49

    谢谢你的帮助

    2 回复  |  直到 7 年前
        1
  •  1
  •   anubhava    7 年前

    使用 grep -oP

    s='ts=2017-06-27-19-59-13-036 | result=SUCCESS | requestId=xyz | elapsed=49'
    
    grep -oP '(result|elapsed)=\S+' <<< "$s"
    
    result=SUCCESS
    elapsed=49
    

    或使用 gnu awk :

    awk -F= -v RS=' \\| |\n' '$1 ~ /^(result|elapsed)$/' <<< "$s"
    
    result=SUCCESS
    elapsed=49
    
        2
  •  0
  •   John Goofy    7 年前
    $ cat file
    ts=2017-06-27-19-59-13-036 | result=SUCCESS | requestId=xyz | elapsed=49
    

    要获得键=值对,请尝试 egrep

    $ egrep -o '[a-z]*[A-Z]*[a-z]*=([0-9-]*|[A-Z]*|[a-z]*)' file
    ts=2017-06-27-19-59-13-036
    result=SUCCESS
    requestId=xyz
    elapsed=49