删除Postgres转储中的换行符



我正在尝试格式化postgres转储(pg_dump),以便能够使用JDBC连接导入它。pg_dump将包含换行符的文本字段导出为带换行符的文本,因此当我稍后尝试使用JDBC导入时,我到达了行尾,语句失败。

我想做的是获取转储,通过sed传递它并转义所有换行符,这样每行就有一个INSERT语句。问题是,我不能只是删除所有的换行符,但我可以删除不匹配这个);nINSERT INTO的所有换行符。有什么简单的方法可以做到这一点吗?

:示例如下:

INSERT INTO sometable (123, And here goes some text
with
newlines
in
it', 'some more fields');

,我要找的结果是这样的:

INSERT INTO sometable (123, And here goes some textnwithnnewlinesninnit', 'some more fields');

使每个INSERT语句在单行上,字符串的换行被转义。

不是sed解决方案,但可能以下工作?

cat test_dump.txt | perl -pe "s/[^();INSERT INTO)]n/\$1\n/"

你可以在 vim

vim my_dump.sql
:%s/();)@<!n(INSERT)@!//c

% . .Do for所有行
s . .替代
n . .newline (Unix样式;你知道,Windows有rn和苹果的r换行符吗?)

标记:
c . .确认每次替换(首先进行测试)

关于消极向前看和向后看的信息
:帮助 @ !
:帮助 @


sed通常操作在上,它需要自己去替换换行符。
Google"sed multi-line replace",你会找到这样的内容

最新更新