【问题标题】:How to fetch the complete statement using UNIX Commands如何使用 UNIX 命令获取完整的语句
【发布时间】:2020-06-03 21:22:52
【问题描述】:

我们使用 Oracle 应用程序,同时也使用 UNIX 开发程序。在我们的 Oracle Apps UNIX 程序中,在运行程序时,我们将传递参数,参数值将存储在 $1 值中。而这个 $1 还会包含其他信息,例如实例、程序 id 是什么、程序运行的用户名和用户 id 等,如下所示

XX_VENDOR_ACH_HOST FCP_REQID=9946271 FCP_LOGIN="APPS/trn12fnd" FCP_USERID=127 FCP_USERNAME="USERNAME" FCP_PRINTER="noprint" FCP_SAVE_OUT=Y FCP_NUM_COPIES=0 "TEST Pay Batch 021120-c"

这里,TEST Pay Batch 021120-c 是唯一的参数值。现在,我需要获取这个参数值。所以,我写了如下命令

echo $1 | cut -d" " -f9 | sed 's/"//g'

但是,它只是打印单词 TEST 而不是完整的值。谁能帮我获取完整的命令以获取 TEST Pay Batch 021120-c

问候, 斯利瓦萨瓦

【问题讨论】:

  • 你把这一切都压缩成 1 美元??为什么?
  • 也许所有以 9 开​​头的字段都使用 cut -9-,但是当 USERNAME 有空格时,这将是 walt。您能否更改数据的连接方式或提供更多详细信息如何cut(可能在FCP_NUM_COPIES 之后的第一个空格之后)。
  • 它总是放在行尾吗?

标签: unix sed cut oracle-apps


【解决方案1】:

假设;

  • 参数值用双引号括起来
  • 参数值位于$1的末尾

那么怎么样;

echo "$1" | sed 's/.*"\([^"]\+\)"$/\1/'

哪个输出:

TEST Pay Batch 021120-c

如果我的假设不正确并且参数值字符串有 一些明显的特征(例如它以TEST Pay Batch开头), 请告诉我。然后我将调整正则表达式以提取参数值。

【讨论】:

    【解决方案2】:

    假设参数值位于$1 的末尾,类似的东西可以做:

    echo $1|awk -F\" '{print $(NF-1)}'
    

    【讨论】:

    • 我都试过了。但没有一个奏效。当我尝试(使用腻子版本 0.63)时 echo $1|awk -F\" '{print $(NF-1)}' as echo XX_VENDOR_ACH_HOST FCP_REQID=9946271 FCP_LOGIN="APPS/trn12fnd" FCP_USERID=127 FCP_USERNAME=" USERNAME" FCP_PRINTER="noprint" FCP_SAVE_OUT=Y FCP_NUM_COPIES=0 "TEST Pay Batch 021120-c"|awk -F\" '{print $(NF-1)}' 它打印为 XX_VENDOR_ACH_HOST FCP_REQID =9946271 FCP_LOGIN=APPS/trn12fnd FCP_USERID=127 FCP_USERNAME=USERNAME FCP_PRINTER=noprint FCP_SAVE_OUT=Y FCP_NUM_COPIES=0 TEST Pay Batch 021120-c 感谢和问候,Srivathsava
    • 回显 "$1" | sed 's/.*"([^"]\+)"$/\1/' as echo "XX_VENDOR_ACH_HOST FCP_REQID=9946271 FCP_LOGIN="APPS/trn12fnd" FCP_USERID=127 FCP_USERNAME="USERNAME" FCP_PRINTER=" noprint" FCP_SAVE_OUT=Y FCP_NUM_COPIES=0 "TEST Pay Batch 021120-c"" | sed 's/."([^"]\+)"$/\1/'* 输出为 XX_VENDOR_ACH_HOST FCP_REQID=9946271 FCP_LOGIN=APPS/trn12fnd FCP_USERID=127 FCP_USERNAME=USERNAME FCP_PRINTER=noprint FCP_SAVE_OUT=Y FCP_NUM_COPIES=0 TEST Pay Batch 021120-c
    • 1.值:FCP_REQID、FCP_LOGIN、FCP_USERID、FCP_USERNAME、FCP_PRINTER、FCP_SAVE_OUT、FCP_NUM_COPIES 将是通用的(即使值不同) 2. Out 程序参数会有所不同。到目前为止,只有一个参数(付款批次。目前的值为:TEST Pay Batch 021120-c)。如果添加了新参数,我很确定这些参数只会在此 Payment Batch 参数之后添加。截至目前,请帮助我获取付款批次值,将其视为未结束
    • 还有一点需要注意的是:
    • 3.该值可能并不总是 TEST Pay Batch 021120-c(带空格)。它可以是没有空格的 (TEST_Pay_Batch_021120-c)。但是,当然,我们没有使用任何特殊字符。我们只使用字母数字、下划线和超字符
    猜你喜欢
    • 2019-01-05
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多