Ви можете використовувати 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 порожній чи ні.