È possibile utilizzare grep
con PCRE ( -P
):
grep -Po 'spring.profiles.active=\K[^ ]+' <<<'.....string.....'
spring.profiles.active=
abbinerà letteralmente questa sottostringa, \K
eliminerà la corrispondenza
[^ ]+
selezionerà la porzione desiderata, ovvero la porzione successiva spring.profiles.active=
, fino allo spazio successivo
Per un file:
grep -Po 'spring.profiles.active=\K[^ ]+' file.txt
Esempio:
% 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
prenderebbe una logica simile:
sed -r 's/.*spring.profiles.active=([^ ]+).*/\1/' <<<'.....string.....'
Esempio:
% 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
Gestione degli errori:
Nel tuo script potresti voler gestire il caso in cui non c'è corrispondenza, in altre parole in cui la stringa originale non contiene spring.profiles.active=
. Nell'esempio sopra sed
, ottieni l'intera stringa originale, che potrebbe creare problemi:
% 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 si preferisce ottenere la stringa vuota in assenza di corrispondenza, aggiungere l' -n
opzione al sed
comando e l' p
opzione al sed
s
comando, in questo modo:
% 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
Quindi puoi verificare se $ var è vuoto o meno.