Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Grep用于行中的多个值并仅输出多个值_Linux_Bash_Unix_Grep - Fatal编程技术网

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