Você pode usar grep
com PCRE ( -P
):
grep -Po 'spring.profiles.active=\K[^ ]+' <<<'.....string.....'
spring.profiles.active=
corresponderá a essa substring literalmente, \K
descartará a correspondência
[^ ]+
selecionará a porção desejada, ou seja, a porção seguinte spring.profiles.active=
, até o próximo espaço
Para um arquivo:
grep -Po 'spring.profiles.active=\K[^ ]+' file.txt
Exemplo:
% 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
levaria lógica semelhante:
sed -r 's/.*spring.profiles.active=([^ ]+).*/\1/' <<<'.....string.....'
Exemplo:
% 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
Manipulando erros:
No seu script, você pode lidar com o caso em que não há correspondência, ou seja, onde a string original não contém spring.profiles.active=
. No sed
exemplo acima , você obtém toda a cadeia original, o que pode criar problemas:
% 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
Se você preferir obter a sequência vazia quando não houver correspondência, adicione a -n
opção ao sed
comando e a p
opção ao sed
s
comando, desta forma:
% 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
Então você pode testar se $ var está vazio ou não.