macos - 带有\n 的 Sed 命令

标签 macos bash unix ubuntu

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

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

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

最佳答案

sed 的版本OS X 附带的不处理 \n作为换行符,但作为转义的“n”(减少为常规的“n”)。由于您使用的是 bash ,您可以尝试以下方法:

sed $'s|,}|\\\n|' file.txt
$'...'bash 中的一种特殊引用类型这允许对某些逃逸进行特殊处理。 \\\n是一个转义的反斜杠,后跟一个换行符,bash赠送给 sed作为单个转义换行符。

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

关于macos - 带有\n 的 Sed 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17574959/

相关文章:

macos - 如何在 mac os x 上查找打印机错误日志?

macos - 在 NSNumberFormatter 子类中调用 NSBeep

arrays - 如何在 Linux Bash 中将 ls 分配给数组?

c - 为什么我的 fork 程序的输出在我通过管道输出时会有所不同?

linux - 递归遍历Samba共享?

unix - 操纵电子邮件地址的路径

git - 在本地服务器和本地PC上使用GIT

mysql - 无法使用 Homebrew 和 Mac 10.8.5 完全卸载 MYSQL 如何从旧安装中查找/删除 "/etc/my.cnf"?

linux - 主从的目的和 fork 过程

docker - 如何在Windows Docker应用程序中安装dos2unix?