Первая задача - извлечь ставку из этой строки. С 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/')"