Первая задача - извлечь ставку из этой строки. С GNU grep (не встроенный Linux или Cygwin) вы можете использовать эту -oопцию. Часть, которую вы хотите, это та, которая содержит только цифры и сопровождается %знаком. Если вы не хотите извлекать %саму себя, вам нужен дополнительный трюк: предпросмотр с нулевой шириной , который ничего не соответствует, но только если за этим ничего не следует %.
command1 -p=aaa -v=bbb -i=4 | grep -o -P '[0-9]+(?=%)'
Другая возможность - использовать sed. Чтобы извлечь часть строки в sed, используйте sкоманду с регулярным выражением, которое соответствует всей строке (начиная с ^и заканчивая $), с частью, которую нужно сохранить в группе ( \(…\)). Замените всю строку содержанием группы (ов), чтобы сохранить. В общем, передайте -nопцию, чтобы отключить печать по умолчанию и поместить pмодификатор для печати строк, где есть что извлечь (здесь есть одна строка, так что это не имеет значения). См. Возврат только части строки после соответствующего шаблона и Извлечение регулярного выражения, сопоставленного с «sed», без печати окружающих символов для получения дополнительных уловок sed.
command1 -p=aaa -v=bbb -i=4 | sed 's/^.*rate(\([0-9]*\)%).*$/\1/'
Опять более гибкий, чем sed, это awk. Awk выполняет инструкции для каждой строки на небольшом императивном языке. Есть много способов извлечь ставку здесь; Я выбираю вторые поля (по умолчанию поля разделяются пробелами) и удаляю все символы в нем, которые не являются цифрами.
command1 -p=aaa -v=bbb -i=4 | awk '{gsub(/[^0-9]+/, "", $2); print $2}'
Следующий шаг, теперь, когда вы извлекли ставку, это передать ее в качестве аргумента command2. Инструментом для этого является команда susbtitution . Если вы поместите команду внутри $(…)(круглая скобка), ее вывод подставляется в командную строку. Вывод команды разбивается на отдельные слова в каждом блоке пробелов, и каждое слово рассматривается как шаблон с подстановочными знаками; если вы не хотите , чтобы это произошло, поставить двойные кавычки вокруг подстановки команд: "$(…)". В двойных кавычках выходные данные команды используются непосредственно в качестве единственного параметра (единственное преобразование состоит в том, что новые строки в конце выходных данных удаляются).
command2 -t "$(command1 -p=aaa -v=bbb -i=4 |
sed 's/^.*rate(\([0-9]*\)%).*$/\1/')"