如何从命令行搜索/替换“二进制”文件

时间:2008-12-19 00:52:26

标签: sql unix import

我有一些数据文件要导入到具有一些“唯一”分隔符的数据库中:

字段分隔符(FS):SOH(ASCII字符1)

记录分隔符(RS):STX(ASCII字符2)+'\ n'

我想使用COPY命令将文件导入Postgres,但是当我可以指定自定义字段分隔符时,它无法处理记录分隔符。

我不能从数据中删除\ 002,因为如果其中一个字段中有换行符(并且有),则会错误地认为COPY认为它实际上是新记录它不是。

需要注意的一件重要事情是:保留字段中的换行符并不重要,如果它们只是转换为空格就没问题。

考虑到这一点,我正在考虑使用像“sed”之类的东西将换行符转换为空格,然后将\ 002转换为换行符。但是,由于sed是一个基于行的工具,它似乎没有在每行的末尾看到换行符,也无法对它们进行搜索/替换。

是否有其他unix命令行工具可以完成这项工作?

编辑:我想我真正要求的是一个unix实用程序,它可以处理文件(执行搜索/替换)为“二进制”而不将其分成行

2 个答案:

答案 0 :(得分:2)

基于Patrick给出的建议,我已经能够使用Perl做到这一点:

cat file | perl -pe的/ \ 002 \ n / \ 002 \ 002 / g'| perl -pe's / \ n / / g'| perl -pe's / \ 002 \ 002 / \ n / g'

答案 1 :(得分:1)

你可以在文件中多次传递吗?传递1将所有\ 002 \ n转换为\ 002 \ 002说。 通过2可以将所有\ n转换为空格。通过3可以将所有\ 002 \ 002转换为\ n。

相关问题