我有一个部分损坏的JSON文件的数据库。由于某种原因编写它们的人在文件末尾包含一个额外的逗号。这些文件有数以万计,所以我需要修复它们。这就是它的样子:
{
"foo": "bar",
"foo1": "bar1",
"foo2": "bar2",
}
所以我正在尝试使用sed命令来删除逗号。现在,我有sed'|,\ n}'|'\ n}'|'但它没有修改文件。我做错了什么?
答案 0 :(得分:0)
OS X附带的sed
版本不会将\n
视为换行符,而是转义为'n'(减少为常规'n')。由于您使用的是bash
,因此您可以尝试以下操作:
sed $'s|,}|\\\n|' file.txt
$'...'
是bash
中的一种特殊类型的引用,允许特殊处理某些转义。 \\\n
是转义后的反斜杠,后跟换行符,bash
将sed
作为单个转义的换行符呈现给$
。
更新:在记住在搜索文本中使用sed
而不是换行符后,我意识到你无法匹配下一行后面跟一个大括号的命令(至少,我不知道)我知道如何使用{{1}}}的有限命令。
答案 1 :(得分:0)
你可以试试awk:
awk '{ if (/}/) sub(",$", "", last); if (last) print last; last=$0 } END { print last }'
答案 2 :(得分:0)
这是一个适用于OSX的sed解决方案:
sed -e ':a' -e 'N; $!ba' -e 's/,\(\n}\)/\1/' file.json
作为替代方案,您可以使用以下命令在OSX上安装gnu-sed:
sudo brew install gnu-sed
然后运行:
gsed -e ':a; N; $!ba; s/,\(\n}\)/\1/' file.json