Postgresql 删除Postgres转储中的换行符
我正在尝试格式化postgres转储(pg_转储),以便能够使用JDBC连接导入它。pg_dump将包含换行符的文本字段导出为带换行符的文本,因此当我稍后尝试使用JDBC导入时,我到达了行的末尾,语句失败 我要做的是获取转储,将其通过Postgresql 删除Postgres转储中的换行符,postgresql,import,sed,export,Postgresql,Import,Sed,Export,我正在尝试格式化postgres转储(pg_转储),以便能够使用JDBC连接导入它。pg_dump将包含换行符的文本字段导出为带换行符的文本,因此当我稍后尝试使用JDBC导入时,我到达了行的末尾,语句失败 我要做的是获取转储,将其通过sed并转义所有换行符,这样每行就有一条INSERT语句。问题是我不能删除所有的换行符,但我可以删除所有不匹配的换行符\n插入到。有没有简单的方法可以做到这一点 更新: 示例如下所示: INSERT INTO sometable (123, And here goe
sed
并转义所有换行符,这样每行就有一条INSERT
语句。问题是我不能删除所有的换行符,但我可以删除所有不匹配的换行符\n插入到。有没有简单的方法可以做到这一点
更新:
示例如下所示:
INSERT INTO sometable (123, And here goes some text
with
newlines
in
it', 'some more fields');
INSERT INTO sometable (123, And here goes some text\nwith\nnewlines\nin\nit', 'some more fields');
我想要的结果是这样的:
INSERT INTO sometable (123, And here goes some text
with
newlines
in
it', 'some more fields');
INSERT INTO sometable (123, And here goes some text\nwith\nnewlines\nin\nit', '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
vim my_dump.sql
:%s/\();\)\@
%。。对所有行执行此操作
s替换
\n。。换行符(Unix风格;您知道,Windows有\r\n
和Apple\r
用于换行符?)
标志:
C确认每次替换(首先用于测试)
关于负向前看和向后看的信息
:救命\@
:救命\@
sed通常在线路上运行,需要特意更换线路中断。
谷歌搜索“sed多行替换”,你会发现类似的东西。你的问题描述非常混乱。您能否显示示例“转储”,以及最终输出所需的内容(仅显示前一行或后两行)。祝你好运。刚刚添加了一个示例来显示我正在寻找的内容。你最好更改SQL解析器,以便能够处理跨几行的字符文本。这很有帮助,但这为我节省了pg_dump--dbname=my_db_name--column inserts-C | perl-pe“{if(/^INSERT-INTO/and!/^INSERT-INTO.*)$/){chomp;}”