Вы можете использовать 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 пустым или нет.