我有一个字符串,它是由“,”分隔的“键”:“值”对的串联,例如-
KEY1:VALUE1, KEY2:VALUE2, KEY3:VALUE3
我必须从该字符串中 grep 查找特定字符串(假设为 KEY2),因此命令的输出应该是 VALUE2。
答案1
使用支持 PCRE 的grep
实现:
grep -Po '(^|[ ,])KEY1:\K[^,]*'
或egrep
和cut
:
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"