Deepak Singhal
Deepak Singhal

Reputation: 10876

Grep for multiple values in line and output MULTIPLE values ONLY

Suppose we have key value pairs like:

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

How can I output multiple key-value pairs; suppose result & elapsed in above line [ search for keys based on keyname not on location]

I wanted output something like: result=SUCCESS | elapsed=49

thanks for help

Upvotes: 1

Views: 2017

Answers (2)

John Goofy
John Goofy

Reputation: 1419

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

To get key=value pairs try 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

Upvotes: 0

anubhava
anubhava

Reputation: 786319

Using 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

Or using gnu awk:

awk -F= -v RS=' \\| |\n' '$1 ~ /^(result|elapsed)$/' <<< "$s"

result=SUCCESS
elapsed=49

Upvotes: 1

Related Questions