在文件的开头和结尾添加括号(JSON)

时间:2017-01-12 18:49:25

标签: json unix sed

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

我有一个看起来像这样的文件:

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

我希望它看起来像这样

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

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

因此,我在目录中有数千个文件,每个文件都必须修复才能完成。

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

编辑:

我试图使用:

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

正如codeforester所建议的那样。我得到一个错误说"参数列表太长" ...

1 个答案:

答案 0 :(得分:2)

我会删除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 {} \;