从字符串中查找特定键的值,由键:值对连接而成

从字符串中查找特定键的值,由键:值对连接而成

我有一个字符串,它是由“,”分隔的“键”:“值”对的串联,例如-

KEY1:VALUE1, KEY2:VALUE2, KEY3:VALUE3

我必须从该字符串中 grep 查找特定字符串(假设为 KEY2),因此命令的输出应该是 VALUE2。

答案1

使用支持 PCRE 的grep实现:

grep -Po '(^|[ ,])KEY1:\K[^,]*'

egrepcut

grep -Eo '(^|[ ,])KEY2:[^,]*' | cut -d: -f2-

对于这两种方法,值都不允许包含逗号。


如果你有合适的json,例如

{ "KEY1":"VALUE1", "KEY2":"VALUE2", "KEY3":"VALUE3" }

你可以使用jq

$ jq .KEY2
"VALUE2"
$ jq -r .KEY2
VALUE2

答案2

常规grep假设 VALUE 不包含冒号:

grep -o 'KEY2:[^,]\+' | grep -o '[^:]\+$'

答案3

使用awk,读取键:值对作为记录,读取键,值作为第一个和第二个字段。

awk -v RS=' *, *' -v FS=' *: *' '$1=="KEY2"{print $2}'  <<<$str
  • -v RS=' *, *'将记录分隔符设置为,及其周围空间
  • -v FS=' *: *'将字段分隔符设置为:及其周围空间
  • '$1=="KEY2"{print $2}'如果找到键则打印值。将“KEY2”更改为您想要的键值。

答案4

仅 grep 值

printf '%s\n' "$myString" | grep -Po "(?<=KEY2:)[^,]*"

或者

grep -Po "(?<=KEY2:)[^,]*" <<< "$myString"

相关内容