基于shell脚本中的字符串匹配从JSON数组中删除元素

时间:2018-05-28 09:03:12

标签: json shell jq

我想根据字符串匹配删除JSON元素(如果存在)。

我正在使用shell脚本。

示例输入:

["https://test-ci.cmxdev.com/dev/AD-885/?oauth=callback",  
"https://test-ci.cmxdev.com/dev/INS-1676-a/?oauth=callback",  
"https://test-jdtest.cmxdev.com?oauth=callback",  
"https://localhost:3000?oauth=callback"]

示例输出(删除第2个元素):

["https://test-ci.cmxdev.com/dev/AD-885/?oauth=callback",   
"https://test-jdtest.cmxdev.com?oauth=callback",  
"https://localhost:3000?oauth=callback"]

2 个答案:

答案 0 :(得分:0)

要从数组中删除所有等于特定值的元素,您可以"减去"数组中的值:

. - [.[1]]

否则,通常的方法是根据您想要的条件重建和过滤数组。

map(select(. != "https://test-ci.cmxdev.com/dev/INS-1676-a/?oauth=callback"))

答案 1 :(得分:0)

我能够使用以下方法进行工作。

查找有效字符串的索引

callback_url_index=$(echo $json_output | jq -r '.UserPoolClient.CallbackURLs | index("https://test-jdtest.cmxdev.com?oauth=callback")');

根据找到的索引

删除元素
if [ "$callback_url_index" != null ] ; then
  callbackURLs=$(echo $json_output | jq -r --arg callback_url_index "$callback_url_index" '.UserPoolClient.CallbackURLs | del(.['$callback_url_index'])')

谢谢!