【问题标题】:How to add in double quotation first word of each line via sed?如何通过sed在每行的第一个单词中添加双引号?
【发布时间】:2021-10-25 14:59:32
【问题描述】:

我有类似内容的文件,但我想让它成为一个有效的 JSON,我需要在双引号中添加一行的每个单词。 我在 StackOverflow 上尝试了现有的答案,但没有一个能正常工作。

{container:"proxy",
 endpoint:"proxy",
 exception:"ApiException"}

转成以下格式:

  {"container":"proxy",
     "endpoint":"proxy",
     "exception":"ApiException"}

【问题讨论】:

  • 运气好的话,文件可以被视为有效的jq 过滤器:jq -nf pseudojson.txt 应该输出格式正确的 JSON。有很多极端情况可能会失败,但可能不会比尝试自己解析数据更糟糕,而且更容易。
  • 很遗憾,jq 无法解析它,因为它不是有效的 JSON 格式。
  • 我没说要把它解析成JSON;我说过将它用作jq 过滤器,它将创建 JSON。 -f 从文件中读取过滤器,而不是在命令行中提供它,-n 阻止 jq 尝试从标准输入中读取。您的伪 JSON 看起来非常像创建对象的过滤器。例如,jq -n '{foo: "bar"} 输出 {"foo": "bar"}
  • 你完全正确!行得通!
  • 很高兴听到您的意见表现得很好:)

标签: linux bash sed


【解决方案1】:

您可以将每个文件视为生成对象的jq 过滤器。例如,

$ cat tmp.jq
{container:"proxy",
 endpoint:"proxy",
 exception:"ApiException",
 instance:"133.3.12.250:9030"}
$ jq -nf tmp.jq
{
  "container": "proxy",
  "endpoint": "proxy",
  "exception": "ApiException",
  "instance": "133.3.12.250:9030"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 2014-09-28
    • 2021-09-24
    • 2019-10-05
    • 2020-03-08
    • 1970-01-01
    • 2018-11-28
    相关资源
    最近更新 更多