1

我有一个部分损坏的 JSON 文件的数据库。出于某种原因编写它们的人在文件末尾包含了一个额外的逗号。这些文件有无数个,所以我需要修复它们。这是它的样子:

{
"foo": "bar",
"foo1": "bar1",
"foo2": "bar2",
}

所以我正在尝试使用 sed 命令来去掉逗号。现在,我已经 sed 's|',\n}'|'\n}'|' 但它没有修改文件。我究竟做错了什么?

4

3 回答 3

0

OS X 附带的版本sed\n视为换行符,而是视为转义的“n”(减少为常规的“n”)。由于您正在使用bash,您可以尝试以下操作:

sed $'s|,}|\\\n|' file.txt

$'...'是一种特殊类型的引用bash,允许对某些转义进行特殊处理。\\\n是一个转义的反斜杠,后跟一个换行符,它bash表示sed为单个转义的换行符。

更新:在记住$在搜索文本中使用而不是换行符后,我意识到您无法匹配下一行中后跟大括号的命令(或者至少,我不知道如何使用我的有限命令sed)。

于 2013-07-10T15:48:31.987 回答
0

你可以试试 awk:

awk '{ if (/}/) sub(",$", "", last); if (last) print last; last=$0 } END { print last }'
于 2013-07-10T16:25:24.230 回答
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
于 2013-07-10T16:50:05.110 回答