【问题标题】:Add brackets to beginning and end of file (JSON)在文件的开头和结尾添加括号 (JSON)
【发布时间】:2017-05-28 00:11:34
【问题描述】:

如果这是一个微不足道的问题,请原谅我,我对此没有太多经验。

我有一个如下所示的文件:

{text},
{text},
{text},
{text},

我希望它看起来像这样

[{text},
 {text},
 {text},
 {text}]

请注意,最后的逗号已被删除,并且文件的开头和结尾现在有方括号。

所以,我在一个目录中有数千个文件,并且必须修复每个文件才能做到这一点。

我猜我必须以某种方式使用 sed,但我真的不知道如何实现它并且不想使用 VIM 手动执行它,因为文件太多...

编辑:

我尝试使用:

sed -i '1s/^/\[/;$s/,$/\]/' *

正如 codeforester 所建议的那样。我收到一条错误消息,提示“参数列表太长”...

【问题讨论】:

    标签: json unix sed


    【解决方案1】:

    我会用sed 删除行尾的现有逗号,然后使用jq 构建json 数组:

    sed 's/,$//' file | jq -s .
    

    要在多个文件上运行它,我建议创建一个小 shell 脚本:

    fix-json.sh

    #!/bin/bash
    file="${1}"
    sed 's/,$//' "${file}" | jq -s . > "${file}.tmp"
    if [ ${PIPESTATUS[1]} != 0 ] ; then
        echo "${file} is broken"
        rm "${file}.tmp"
    else
        mv "${file}.tmp" "${file}"
    fi
    

    现在使用find 对输入文件运行上述脚本:

    chmod +x fix-json.sh 
    find /path/to/files -type f -name '*.json' -exec ./fix-json.sh {} \;
    

    【讨论】:

    • 我复制了您编写的脚本并按原样运行。 (除了 -name '.json',我只是做了 -name '')。无论哪种方式,当我这样做时,文件都没有发生任何事情......即括号不存在并且最后的逗号没有被删除。另外,我只需要删除最后一行的逗号而不是所有行
    • 当然,如果您使用-name '',则不会匹配任何文件。如果您不关心文件名,请完全忽略 -name 选项。但是在运行它之前要小心并创建一个备份(只是为了确保你没有错过提到问题中的重要内容)。请记住,find 以递归方式运行,这意味着它还将处理子文件夹中的文件。如果你不想那样使用-maxdepth 1
    • 我的所有文件都在同一个目录下(折叠了所有子文件夹)
    • 很高兴听到这个消息! :)
    • 我说得太早了。某些文件给出了错误提示 sed: //name.tmp: No such file or directory。我还看到一条消息说“解析错误:第 4 行第 8 列的值之间的预期分隔符”。
    猜你喜欢
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    相关资源
    最近更新 更多