Puede usar grepcon PCRE ( -P):
grep -Po 'spring.profiles.active=\K[^ ]+' <<<'.....string.....'
spring.profiles.active=coincidirá con esta subcadena literalmente, \Kdescartará la coincidencia
[^ ]+seleccionará la porción deseada, es decir, la porción posterior spring.profiles.active=, hasta el siguiente espacio
Para un archivo:
grep -Po 'spring.profiles.active=\K[^ ]+' file.txt
Ejemplo:
% 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 tomaría una lógica similar:
sed -r 's/.*spring.profiles.active=([^ ]+).*/\1/' <<<'.....string.....'
Ejemplo:
% 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
Errores de manejo:
En su secuencia de comandos, es posible que desee manejar el caso donde no hay coincidencia, en otras palabras, donde su cadena original no contiene spring.profiles.active=. En el sedejemplo anterior , obtiene la cadena original completa, lo que podría crear 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
Si prefiere obtener la cadena vacía cuando no hay coincidencia, agregue la -nopción al sedcomando y la popción al sed scomando, así:
% 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
Luego puede probar si $ var está vacío o no.