Как получить полный оператор с помощью команд UNIX

Мы используем приложения Oracle, а также разрабатываем программы с использованием UNIX. В нашей программе Oracle Apps UNIX при запуске программы мы будем передавать параметры, и значения параметров будут храниться в значении $1. И этот $ 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"

здесь TEST Pay Batch 021120-c является единственным значением параметра. Теперь мне нужно получить значение этого параметра. Итак, я написал команду, как показано ниже

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

Но это просто печатает слово TEST, а не полное значение. Может ли кто-нибудь помочь мне с полной командой для получения TEST Pay Batch 021120-c?

С уважением, Шриватсава


person Bommi    schedule 19.02.2020    source источник
comment
Вы сжимаете все это в 1 доллар ?? Почему?   -  person glenn jackman    schedule 19.02.2020
comment
Возможно, все поля, начинающиеся с 9, используют cut -9-, но это не работает, когда USERNAME имеет пробел. Можете ли вы изменить способ объединения данных или дать более подробную информацию о том, как cut (возможно, после первого пробела после FCP_NUM_COPIES).   -  person Walter A    schedule 19.02.2020
comment
Всегда ли это место в конце строки?   -  person Romeo Ninov    schedule 28.02.2020


Ответы (2)


Предполагая;

  • Значение параметра заключено в двойные кавычки
  • Значение параметра находится в конце $1

тогда как насчет;

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

который выводит:

TEST Pay Batch 021120-c

Если мои предположения неверны и если строка значения параметра имеет некоторые отличительные характеристики (например, она начинается с TEST Pay Batch), сообщите мне об этом. Затем я изменю регулярное выражение, чтобы извлечь значение параметра.

person tshiono    schedule 20.02.2020

Предполагая, что значение параметра находится в конце $1, что-то вроде этого может выполнить эту работу:

echo $1|awk -F\" '{print $(NF-1)}'
person Romeo Ninov    schedule 28.02.2020
comment
Я пробовал оба. Но ни один не работал. Когда я попытался (используя версию Putty 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=ИМЯ ПОЛЬЗОВАТЕЛЯ 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 С уважением, Шриватсава - person Bommi; 03.03.2020
comment
эхо $1 | sed 's/.*([^]\+)$/\1/' as echo XX_VENDOR_ACH_HOST FCP_REQID=9946271 FCP_LOGIN=APPS/trn12fnd FCP_USERID=127 FCP_USERNAME=ИМЯ ПОЛЬЗОВАТЕЛЯ FCP_PRINTER=noprint FCP_SAVE_OUT=Y FCP_NUM_COPIES=0 TEST Pay Партия 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 ТЕСТ. Пакет оплаты 021120-c - person Bommi; 03.03.2020
comment
1. Значения: FCP_REQID, FCP_LOGIN, FCP_USERID, FCP_USERNAME, FCP_PRINTER, FCP_SAVE_OUT,FCP_NUM_COPIES будут общими (даже если значения различаются) 2. Параметры Out Program будут различаться. На данный момент только один параметр (Payment Batch. Значение которого на данный момент: TEST Pay Batch 021120-c). Если будут добавлены новые параметры, я уверен, что они будут добавлены только после этого параметра пакета платежей. На данный момент, пожалуйста, помогите мне получить значение пакета платежей, считая его неконечным. - person Bommi; 03.03.2020
comment
Еще одно замечание: - person Bommi; 03.03.2020
comment
3. Значение может не всегда соответствовать TEST Pay Batch 021120-c (с пробелами). Можно как без пробелов (TEST_Pay_Batch_021120-c). Но, конечно же, мы не используем никаких специальных символов. Мы используем только буквенно-цифровые символы, подчеркивание и гипер - person Bommi; 03.03.2020