Linux Grep用于行中的多个值并仅输出多个值
假设我们有键值对,如:Linux Grep用于行中的多个值并仅输出多个值,linux,bash,unix,grep,Linux,Bash,Unix,Grep,假设我们有键值对,如: ts=2017-06-27-19-59-13-036 | result=SUCCESS | requestId=xyz | elapsed=49 如何输出多个键值对;假设结果&在上面的行中经过[根据keyname而不是位置搜索关键字] 我希望输出类似于: 结果=成功|经过=49 感谢您使用grep-oP提供帮助: s='ts=2017-06-27-19-59-13-036 | result=SUCCESS | requestId=xyz | elapsed=49' g
ts=2017-06-27-19-59-13-036 | result=SUCCESS | requestId=xyz | elapsed=49
如何输出多个键值对;假设结果&在上面的行中经过[根据keyname而不是位置搜索关键字]
我希望输出类似于:
结果=成功|经过=49
感谢您使用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
要获取键=值对,请尝试使用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
我想要两个键和值的输出。我更新了我的答案
\S
表示匹配任何非空白字符。anubhava您的输出仅打印一个键值对;如何打印两对KV?它正在打印输出中所示的两对KV。共有两对:result=SUCCESS
和appead=49
谢谢。。有没有可能把它印在同一行上,像管子一样分开
$ cat file
ts=2017-06-27-19-59-13-036 | result=SUCCESS | requestId=xyz | elapsed=49
$ 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