【问题标题】:sed, JSON and curly bracessed、JSON 和花括号
【发布时间】:2015-01-14 08:07:48
【问题描述】:

我有一个文件,其中包含 JSON 数据之前的一些文本。 我试图摆脱文本,只保留 JSON,所以我正在使用:

sed -n '/{"data"/,$p' myfile.txt

此命令的结果在终端中运行良好 - 它只返回 JSON,但是当我使用以下命令将输出推送到文件时:

sed -n '/{"data"/,$p' myfile.txt > output.json

那么“output.json”仍然有一些文本。我知道我在正确转义花括号时遇到问题,并且 sed 将我的 {"data" 视为正则表达式,但我不知道如何避免这种情况。

【问题讨论】:

  • 请编辑您的 Q 以包含一组最小的 JSON 来说明问题。不要使用猜测;-)
  • 不要使用面向行的工具来操作结构化数据。有很好的 JSON 工具可以正确理解输入格式并注意不要破坏它。
  • @shellter - 这是我作为 myfile.txt 的一个很好的例子:code.google.com/p/droidbox/issues/detail?id=59 我只想获取 JSON 数据。
  • @tripleee - 我知道 :) 但首先我需要从包含非 JSON 文本的文件中提取 JSON 数据。
  • 尽管您的sed 没有成功的原因,一个简单的解决方法是awk '/^\{"data"/{p=1}p' myfile.txt >output.json

标签: json bash sed curly-braces


【解决方案1】:

经过更多调查后,我发现生成原始“myfile.txt”(JSON + 一些文本)的脚本(不是我的)添加了特殊字符。我猜这些字符存在于文件中的事实使系统认为这是一个二进制文件,因此我有我的问题。

当我执行“cat -v output.json”时,我可以看到如果我只执行“cat output.json”则不会显示的附加文本。

作为一种解决方法,我修改了原始脚本,不添加一些额外的文本。

使用修改后的脚本,生成的“myfile.txt”可以用 sed 解析,你上面的建议很有效。

感谢所有做出贡献并花时间帮助我的人。

【讨论】:

    猜你喜欢
    • 2016-11-25
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 2019-01-26
    相关资源
    最近更新 更多