Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.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
Json sed命令不选择值_Json_Linux_Bash_Sed - Fatal编程技术网

Json sed命令不选择值

Json 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命令的帮助。 我想选择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/}//')
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