Вы можете использовать grepс PCRE ( -P):
grep -Po 'spring.profiles.active=\K[^ ]+' <<<'.....string.....'
spring.profiles.active=будет сопоставлять эту подстроку буквально, \Kбудет отбрасывать совпадение
[^ ]+выберет желаемую часть, т.е. часть после spring.profiles.active=, до следующего пробела
Для файла:
grep -Po 'spring.profiles.active=\K[^ ]+' file.txt
Пример:
% grep -Po 'spring.profiles.active=\K[^ ]+' <<<'00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -Dspring.profiles.active=qa -XX:MaxPermSize=256'
qa
sed взял бы похожую логику:
sed -r 's/.*spring.profiles.active=([^ ]+).*/\1/' <<<'.....string.....'
Пример:
% sed -r 's/.*spring.profiles.active=([^ ]+).*/\1/' <<<'00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -Dspring.profiles.active=qa -XX:MaxPermSize=256'
qa
Обработка ошибок:
В вашем скрипте вы можете использовать случай, когда нет совпадения, другими словами, где ваша исходная строка не содержится spring.profiles.active=. В приведенном выше sedпримере вы получите всю исходную строку, которая может создать проблемы:
% var="$(sed -r 's/.*spring.profiles.active=([^ ]+).*/\1/' <<<'00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -XX:MaxPermSize=256')"
% echo $var
00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -XX:MaxPermSize=256
Если вы предпочитаете получать пустую строку при отсутствии совпадений, добавьте -nпараметр в sedкоманду и pпараметр в sed sкоманду, например:
% var="$(sed -rn 's/.*spring.profiles.active=([^ ]+).*/\1/p' <<<'00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -XX:MaxPermSize=256')"
% echo $var
% var="$(sed -rn 's/.*spring.profiles.active=([^ ]+).*/\1/p' <<<'00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -Dspring.profiles.active=qa -XX:MaxPermSize=256')"
% echo $var
qa
Затем вы можете проверить, является ли $ var пустым или нет.