【问题标题】:how does apache commons-cli parses \\t characterapache commons-cli 如何解析 \\t 字符
【发布时间】:2015-08-28 18:27:48
【问题描述】:

我需要在 commons-cli 中将 tab 作为参数传递。当我将参数设为“\\t”时,命令行解析器会将其解析为“\t”字符本身,而不是 TAB ( ) 空格。我怎样才能做到这一点?

编辑:

正如@centic 所建议的,用我如何调用应用程序来更新问题。我在 Unix 中使用命令行调用,其中反斜杠被检测为转义字符。

更准确地说,我在提交 hadoop 流作业时使用它,如果这有帮助的话。例如:

hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.4.0.jar -D stream.map.output.field.separator="\t" -file mapper.py -mapper 映射器。 py -file reducer.py -reducer reducer.py -input /in -output /out

Apache Hadoop 使用 Apache Commons-cli 作为命令行实用程序。所以我假设“\\t”解析为“\t”并作为选项传递。但是当我通过调试 hadoop 源代码打印它时,它不是 TAB 空格字符,而是打印为“\t”(字符串文字)本身。

【问题讨论】:

  • 您尝试过“”,即引号中的实际标签吗?
  • 我的目标是了解 commons-cli 如何解析反斜杠本身。我使用 \\\t 是否正确,我假设在解析后解析为 \\t 根据 UTF-8 字符集是制表符(空白字符)?如果不是,为什么我不能使用特殊字符,如 \\t、\\n 作为空白字符?否则您将如何实现这一目标?
  • 也许您可以编辑问题并列出您调用应用程序的准确程度。还有其他可能干扰的部分,例如unix 上的 shell 通常也将反斜杠解释为 escape-char,因此那里的东西可能已经被你破坏了......
  • @centic - 相应地更新了问题。

标签: shell command-line command-line-interface backslash apache-commons-cli


【解决方案1】:

当您尝试在 shell 中调用应用程序时提供此功能时,这实际上与 shell 如何处理此类特殊字符有关,而不是 commons-cli 或 Java。

shell(这是当今大多数 unix/linux 版本的默认 shell)具有特殊语法 $'\t',请参阅手册中的 this section

所以你的电话会是这样的

HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.4.0.jar -D 
stream.map.output.field.separator=$'\t' -file mapper.py -mapper 
mapper.py -file reducer.py -reducer reducer.py -input /in -output /out

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多