^ @字符在Linux上的Windows Postgres备份文件中肆虐

时间:2014-10-24 15:09:01

标签: linux windows postgresql emacs psql

我在Windows上使用pgAdmin3从某人那里获得了一些Postgres表转储。 (Blech。)首先,它在文件的顶部有一大堆额外的垃圾,我不得不摆脱 - 没有评论的“toc.dat”等等。

我已经手动编辑它们以使它们以可操作的格式导入,因为它看起来有点乱码;在大多数情况下,我已经成功了,但是当我在emacs中打开它们时,它们往往会散落着以下角色:

^ @

有时只是很多:

@@@

enter image description here

我还没弄明白如何使用sed或awk删除它们,主要是因为我不知道它们是什么(我认为它们不是空字符),甚至不知道如何在emacs中搜索它们。对于“不可打印”的角色,它们显示为红色。 (上面的截图。)当我捕获文件或在我的OS X文本编辑器中打开它时,它们似乎也没有打印到终端,但当我尝试使用postgres导入文件时它们肯定会导致错误

psql mydatabase < table.backup

除非我全部编辑。

有人想知道如何摆脱这些手工编辑的好方法吗?我已尝试使用sed并尝试使用tr,但没有效果 - 也许我正在寻找错误的东西。 (因为我确定你知道,试图谷歌'^ @'是徒劳的!)

只是想知道是否有人碰到过这个,因为除非我弄明白,否则它会对我吃掉......

谢谢!

1 个答案:

答案 0 :(得分:1)

那些 null characters。您可以使用以下命令删除它们:

tr -d '\000' < file1 > file2

-d参数告诉trremove characters with the octal value 000 我在this forum post上找到了tr命令,所以有些功劳归于他们。

我可能会建议获取对Windows计算机的访问权限(从未想过我会这么说),加载他们给你的原始转储,并以其他一些格式导出,看看你是否可以完全避免这个问题。在导入之前,对我来说,在数据库转储上为sedtr运行任何内容似乎更安全。祝你好运!