【问题标题】:How to remove some characters from the following response using sed?如何使用 sed 从以下响应中删除一些字符?
【发布时间】:2017-01-12 05:23:25
【问题描述】:

我收到来自 curl 请求的响应,如下所示:

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

我想使用 sed 从响应中删除字符 [ " , ]。如何做到这一点。我尝试了一些组合,但没有奏效。我的格式化响应应该如下所示:

string1 string 2 string3

【问题讨论】:

  • 这是一个 JSON 数组吗?使用JSON parser 处理不是更好吗?另外,您尝试过什么?我们这里的大多数人都很乐意帮助你提高你的手艺,但作为短期无偿编程人员不太乐意。在MCVE 中向我们展示您迄今为止的工作、您期望的结果和您得到的结果,我们将帮助您解决问题。
  • 请将您的问题edit 显示what you have tried so far。您应该包含您遇到问题的代码的minimal reproducible example,然后我们可以尝试帮助解决具体问题。您还应该阅读How to Ask

标签: regex bash shell unix sed


【解决方案1】:

使用适当的JSON 解析器,如jq 来解析cURL 输出。如果能安装,处理就再简单不过了,

<your-curl-response> | jq -r '.[]'

这就是你所需要的,过滤器上的-r 标志会产生一个没有双引号的原始输出。

使用mapfile 命令(从bash 4.0 开始)将其存储在数组中

mapfile -t jsonarray < <(<your-curl-command> | jq -r '.[]')

然后你可以访问元素,

printf "%s\n" "${jsonarray[0]}"

【讨论】:

  • 现在如何像访问数组元素一样访问每个元素。现在我有这样的响应: string1 string2 string3 。 . . . stringN 现在我想访问每个字符串。该怎么做?
  • 是的,我现在的响应是 string1 string2 string3 。 . . stringN 每个字符串换行
  • 基本上,我的 curl 请求向我发送了我想使用它们的名称一一删除的对象列表。 @Inian
  • @sauravmajumder:你能看到我的更新吗?你能告诉我你curl命令和jq一起吗,我会相应地更新答案
【解决方案2】:

使用 awk 进行清理:

$ arr=($(awk -v ORS=\  'gsub(/[\[\]\",]/,"")||1' file))
$ echo ${arr[*]}
string1 string2 string3

解释:

  • awk -v ORS=\ ' 使用 awk,将输出记录分隔符设置为空格(而不是换行符)
  • gsub(/[\[\]\",]/,"") 删除不需要的字符
  • ||1 或一个即使没有替换也能保证打印
  • ' file文件名

解决方案要求 cURL 输出在一个文件中(上面名为 file)。

【讨论】:

  • 真的再次感谢Awk 的实力,但由于某种原因,在没有jq 的情况下在linux 中解析JSON 并不押韵:)
  • 它可能不是 JSON...(...我在开玩笑...)
【解决方案3】:

您可以为此使用tr

echo $(tr -d '[\[\]",]' < your_file)
# output: string1 string2 string3

echo $(tr -d '[\[\]",]' < <(your curl command))

【讨论】:

    【解决方案4】:
    awk '{gsub(/\[|\]|"|,/,"",$0)}1' input | xargs
    string1 string2 string3
    

    curl command |awk '{gsub(/\[|\]|"|,/,"",$0)}1'| xargs
    

    在这里,awk 正在执行所有搜索和替换任务,例如替换 [ ] , " 。一旦它完成xargs 将把awk 的多行输出合并到一行。

    【讨论】:

    • 你能告诉我如何将它存储在数组中吗?即,array=(curl 命令 |awk '{gsub(/[|]|"|,/,"",$0)}1'| xargs)
    • 请检查 Inian 的回答。
    • 虽然这段代码 sn-p 可以解决问题,包括说明 如何为什么 这解决了问题 would really help 以改进你的帖子质量。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人!请edit您的答案添加解释,并说明适用的限制和假设。
    猜你喜欢
    • 2013-05-09
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多