Перше завдання - витягнути ставку з цього рядка. За допомогою GNU grep (невбудований Linux або Cygwin), ви можете використовувати цю -o
опцію. Частина, яку ви хочете, - це та, яка містить лише цифри, а за нею - %
знак. Якщо ви не хочете витягувати %
себе, вам потрібен додатковий трюк: твердження нульової ширини пошуку , яке не відповідає нічого, але тільки якщо за цим нічого не дотримується %
.
command1 -p=aaa -v=bbb -i=4 | grep -o -P '[0-9]+(?=%)'
Інша можливість - використовувати sed. Щоб витягти частину рядка в sed, використовуйте s
команду з регулярним виразом, який відповідає цілому рядку (починаючи з ^
і закінчуючи $
), а частину зберегти в групі ( \(…\)
). Замініть весь рядок на вміст групи (груп), який потрібно зберегти. Загалом, пропустіть -n
опцію вимкнення друку за замовчуванням і покладіть p
модифікатор на друк рядків, де є що витягнути (тут є один рядок, щоб це не мало значення). Див. Розділ Повернення лише частини рядка після узгодженого шаблону та Вилучення регулярного вираження, збіганого з '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
. Інструментом для цього є командна субситуація . Якщо ви помістите команду всередину $(…)
(долар-кругла дужка), її вихід замінюється в командний рядок. Вихід команди розбивається на окремі слова в кожному блоці пробілів, і кожне слово трактується як шаблон підстановки; якщо ви не хочете , щоб це відбулося, поставити подвійні лапки навколо підстановки команд: "$(…)"
. За допомогою подвійних лапок вихідна команда використовується безпосередньо як єдиний параметр (єдине перетворення полягає в тому, що нові рядки в кінці виводу видаляються).
command2 -t "$(command1 -p=aaa -v=bbb -i=4 |
sed 's/^.*rate(\([0-9]*\)%).*$/\1/')"