我收到卷曲请求的回复,如下所示:
[
"string1",
"string2",
"string3"
]
我想删除字符[" ,]来自使用sed的响应。怎么做。我尝试了一些组合,但都没有效果。我的格式化响应应如下所示:
string1 string 2 string3
答案 0 :(得分:2)
使用jq
之类的JSON
解析器来解析cURL
输出。如果你可以安装它,处理就这么简单了,
<your-curl-response> | jq -r '.[]'
就是你所需要的,过滤器上的-r
标志产生没有双引号的原始输出。
使用mapfile
命令(从bash 4.0
开始)将其存储在数组中
mapfile -t jsonarray < <(<your-curl-command> | jq -r '.[]')
然后你可以访问元素,
printf "%s\n" "${jsonarray[0]}"
答案 1 :(得分:1)
使用awk进行清洁:
$ arr=($(awk -v ORS=\ 'gsub(/[\[\]\",]/,"")||1' file))
$ echo ${arr[*]}
string1 string2 string3
说明:
awk -v ORS=\ '
使用awk,将输出记录分隔符设置为空格(而不是换行符)gsub(/[\[\]\",]/,"")
删除不需要的字符||1
或一个保证打印' file
filename 解决方案期望cURL
输出位于文件中(上面名为file
)。
答案 2 :(得分:0)
awk '{gsub(/\[|\]|"|,/,"",$0)}1' input | xargs
string1 string2 string3
或
curl command |awk '{gsub(/\[|\]|"|,/,"",$0)}1'| xargs
在这里,awk正在执行所有搜索和替换任务,例如替换[ ] , "
。完成后xargs
会将awk
的多行输出合并为一行。
答案 3 :(得分:0)
您可以使用tr
:
echo $(tr -d '[\[\]",]' < your_file)
# output: string1 string2 string3
或
echo $(tr -d '[\[\]",]' < <(your curl command))