У меня проблемы с получением следующего поведения:
input='somestring... --key1 val1 --key2 val2 --key3 val3 somestring...'
output='val1'
Я пытался с помощью:
echo $input | sed -nE 's/.*--key1 (.*) (--.*)$/\1/p'
#but this gives 'val1 --key2 val2' instead of 'val1'
По сути, моя проблема в том, что я не знаю, как сказать sed
чтобы он соответствовал шаблону в обратном порядке (чтобы --key2
не был записан в \1
). Я считаю, что здесь есть простой способ, но я не могу его найти?
изменить: исправить можно было бы использовать:
echo $input | sed -nE 's/.*--key1 ([^(--)]*) (--.*)$/\1/p'
Но я хотел бы знать, существует ли "лучшее" решение для этого варианта использования?