2010-01-20 83 views
1

我正在处理一个项目,我们正在处理使用ksh脚本和Perl脚本从数据库表导入/导出数据。我们有一个现有的过程来将数据从一个表格导出到一个文件,然后导入到另一个系统中。如何处理不可打印的ASCII字符参数?

下面是捕获 - 导出过程转储出管道分隔文件,而进行导入的系统需要由ASCII组分隔符(十进制29,十六进制1d或八进制35)分隔的文件。它显示在vi as ^]现在,我通过Perl脚本转换分隔符。我想要做的是告诉我们的出口过程只使用我们期待的分隔符。喜欢的东西:

export_table.ksh -d“\ 035”

问题是我无法弄清楚如何将这些字符传递给导出脚本。

我试过各种单引号,双引号,反斜杠和这个字符的八进制和十六进制版本的组合。

我在Solaris 10上使用ksh和/或Perl。

+0

对于八进制,只需在第一个单引号前添加一个美元符号:'$'\ 035'' – 2010-01-20 20:12:36

回答

2

你尝试过:

$ '\ X29'

实际尝试一下本作]:

echo $'\x5d' 

和^

echo $'\x5e' 

,所以你只需要做:

export_table.ksh -d $'\x5e\x5d' 
+0

对不起,我的问题还不够清楚。我已经更新了我想要工作的例子。我不想把^作为我的分隔符。如果我以预期的格式打开其中一个文件,这就是vi显示的内容。 我想要ASCII码29或十六进制1D的组分隔符ASCII字符。我会尝试你的建议,并让你知道它是否适用于此。 – 2010-01-20 20:06:04

+0

echo $'\ x1d'似乎可以做到这一点。谢谢! – 2010-01-20 20:09:28

0

在bash(1)中,可以用^ v前缀字符来逐字输入该字符。也许ksh(1)也一样?

+0

这有效,但我需要能够通过脚本完成,而不仅仅是交互式。因此,ennuikiller的答案稍微好一点。 – 2010-01-20 20:11:55

相关问题