Json sed命令不选择值
我需要sed命令的帮助。 我想选择json值并通过使用sed选择来分配给变量。 我怎么做 i、 eJson sed命令不选择值,json,linux,bash,sed,Json,Linux,Bash,Sed,我需要sed命令的帮助。 我想选择json值并通过使用sed选择来分配给变量。 我怎么做 i、 e 请尝试以下sed并告知我们这是否有助于您: url=$(echo "{url:news.google.com,int:3}" | sed 's/\({\)\([^:]*\)\(:\)\([^,]*\)\(.*\)/\4/') echo "$url" news.google.com int=$(echo "{url:news.google.com,int:3}" | sed 's/.*://;s
请尝试以下
sed
并告知我们这是否有助于您:
url=$(echo "{url:news.google.com,int:3}" | sed 's/\({\)\([^:]*\)\(:\)\([^,]*\)\(.*\)/\4/')
echo "$url"
news.google.com
int=$(echo "{url:news.google.com,int:3}" | sed 's/.*://;s/}//')
echo "$int"
3
仅对您可以完全控制的最简单的JSON结构使用
sed
。如果它成为任何嵌套的对象,sed
不是您想要的工具。正如Sundeep所说,jq
、Perl、Python等是更好的选择
尽管如此
echo "{url:news.google.com,int:3}" | sed 's/{//;s/}//;s/:/=/g;s/,/\n/g'
将生成您的输出。使用
grep
,尽管grep
不是解析json的正确工具,但对于给定的数据,这应该是可行的
grep -oP 'url:\K[^,}]*'
测试结果:
$ echo "{url:news.google.com,int:3}" | grep -oP 'url:\K[^,}]*'
news.google.com
$ echo "{url:news.google.com,int:3}" | grep -oP 'int:\K[^,}]*'
3
用于重置先前匹配的数据\K
$(…)
中的一个上方换行,如
url=$( echo "{url:news.google.com,int:3}" | grep -oP 'url:\K[^,}]*' )
或
$ url=$( grep -oP 'url:\K[^,}]*' <<<"{url:news.google.com,int:3}" )
$ echo $url
news.google.com
$url=$(grep-oP'url:\K[^,}]*'避免对json输入使用sed
。。使用类似jq
的解析器或带有json模块的编程语言。这真的是您想要扫描的典型行吗?
$ url=$( grep -oP 'url:\K[^,}]*' <<<"{url:news.google.com,int:3}" )
$ echo $url
news.google.com