如何使用sed删除以下响应中的某些字符?

时间:2017-01-12 05:23:26

标签: regex bash shell unix sed

我收到卷曲请求的回复,如下所示:

[
"string1",
"string2",
"string3"
]

我想删除字符[" ,]来自使用sed的响应。怎么做。我尝试了一些组合,但都没有效果。我的格式化响应应如下所示:

string1 string 2 string3

4 个答案:

答案 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))