【问题标题】:How to handle non-printable ASCII character parameters?如何处理不可打印的 ASCII 字符参数?
【发布时间】:2011-01-07 10:14:42
【问题描述】:

我正在处理一个项目,我们正在处理使用 ksh 脚本和 Perl 脚本从数据库表中导入/导出数据。我们有一个将数据从表导出到文件的现有流程,然后将其导入另一个系统。

这里有一个问题 - 导出过程转储出管道分隔的文件,而正在执行导入的系统需要由 ASCII 组分隔符分隔的文件,即十进制 29、十六进制 1d 或八进制 35。它在 vi 中显示为^] 现在,我正在通过 Perl 脚本转换分隔符。我想做的是告诉我们的导出过程只使用我们期望的分隔符。比如:

export_table.ksh -d '\035'

问题是我不知道如何将此字符传递给导出脚本。

我尝试了单引号、双引号、反斜杠以及这个字符的八进制和十六进制版本的各种组合。

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

【问题讨论】:

  • 对于八进制,只需在第一个单引号前添加一个美元符号:$'\035'

标签: unix shell solaris ksh


【解决方案1】:

你试过了吗:

$'\x29'

实际上试试这个]:

echo $'\x5d'

对于 ^

echo $'\x5e'

所以你只需要这样做:

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

【讨论】:

  • 对不起,我的问题不够清楚。我已经更新了我想要工作的示例。我不希望 ^] 作为我的分隔符。如果我以预期格式打开其中一个文件,这就是 vi 显示的内容。我想要组分隔符 ASCII 字符,即 ASCII 代码 29 或十六进制 1D。我会试试你的建议,并让你知道它是否适用。
【解决方案2】:

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

【讨论】:

  • 这可行,但我需要能够从脚本中完成,而不仅仅是交互方式。出于这个原因,ennukiller 的答案稍微好一些。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-11
  • 2016-12-25
  • 2018-10-17
相关资源
最近更新 更多