Grep表示行中的多个值,仅输出MULTIPLE值

时间:2017-06-27 14:37:02

标签: linux bash unix grep

假设我们有键值对,如:

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

如何输出多个键值对;假设结果&在上面的行中经过[根据键名不在位置搜索键]

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

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

使用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

答案 1 :(得分:0)

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

要获取key = value对,请尝试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