【问题标题】:Mac OS replace multiline with one character using sedMac OS 使用 sed 将多行替换为一个字符
【发布时间】:2020-09-20 06:38:00
【问题描述】:

我希望这不是重复的,我阅读了一些问题,但我仍在努力实现这一目标。

假设我有这个文本:

{
  "root": {
    "2020-05": []
  }
}
{
  "root2": {
    "result": "error",
    "message": "You can't access this resource as it requires 'view' access for the website id = 206."
  }
}

我将如何得到以下结果:

{
  "root": {
    "2020-05": []
  },
  "root2": {
    "result": "error",
    "message": "You can't access this resource as it requires 'view' access for the website id = 206."
  }
}

我需要更换

{
}

只有这个

,

或者更好的是我需要替换它

  }
}
{

只有这个:

  },

使用 sed 实现这一目标的最佳方法是什么?

我不确定正则表达式部分,我试过这个/^{}$/ 和这个$}^${^

谢谢

【问题讨论】:

    标签: regex bash macos sed


    【解决方案1】:

    jq,只是

    jq -s add tmp.json
    

    -s 选项将流中的两个对象读入一个数组,然后add 过滤器将这两个对象合并为一个。

    演示:

    $ jq -s add <<EOF
    > {
    >   "root": {
    >     "2020-05": []
    >   }
    > }
    > {
    >   "root2": {
    >     "result": "error",
    >     "message": "You can't access this resource as it requires 'view' access for the website id = 206."
    >   }
    > }
    > EOF
    {
      "root": {
        "2020-05": []
      },
      "root2": {
        "result": "error",
        "message": "You can't access this resource as it requires 'view' access for the website id = 206."
      }
    }
    

    【讨论】:

    • 嗨,谢谢你的回答,我在考虑 jq,但问题是,我已经有了这个文件,它看起来像我的示例中的那个文件,其中有很多 json 对象混合在一起,所以我想 jq 不会有帮助,我需要使用查找和替换?我可能弄错了。我对 jq 不是很熟悉,演示真的适用于此吗?我去试试
    • 这个答案不限于组合两个对象; [a, b, c, ..., z] | add 基本上就是a + b + c + ... z
    • 太棒了,我不知道 jq 有这个功能,我用 EOF 试过了,效果很好,现在的问题是如何传递包含所有这些文本的文件?我试过这个echo | jq -s add &lt; data.json,但没有用。可能是一个菜鸟问题,但它真的会帮助我。谢谢
    • 我也在尝试这个:value=$(&lt;data.json) echo "$value" echo | jq -s add &lt;&lt;EOF $value EOF 但我只得到第一个对象。有没有办法做到这一点?谢谢”
    • 好的,现在可以了,我有一个重复的密钥,非常感谢您的建议。
    【解决方案2】:

    jq 可以工作,但如果你有perl 命令你也可以试试:

    perl -0777 -pe 's/}\n{/,/g' file.txt
    

    argument docs

    • -0777 读取整个文件
    • pe 评估引号中的内容而不是文件,然后循环播放

    【讨论】:

      猜你喜欢
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 2015-04-19
      • 1970-01-01
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多