sed命令用\ n

时间:2013-07-10 15:36:47

标签: macos bash unix ubuntu

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

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

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

3 个答案:

答案 0 :(得分:0)

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

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

$'...'bash中的一种特殊类型的引用,允许特殊处理某些转义。 \\\n是转义后的反斜杠,后跟换行符,bashsed作为单个转义的换行符呈现给$

更新:在记住在搜索文本中使用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