Możesz używać grep
z PCRE ( -P
):
grep -Po 'spring.profiles.active=\K[^ ]+' <<<'.....string.....'
spring.profiles.active=
dopasuje ten podciąg dosłownie, \K
odrzuci dopasowanie
[^ ]+
wybierze żądaną część, tj. część po spring.profiles.active=
, aż do następnej spacji
Dla pliku:
grep -Po 'spring.profiles.active=\K[^ ]+' file.txt
Przykład:
% 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
przyjąłby podobną logikę:
sed -r 's/.*spring.profiles.active=([^ ]+).*/\1/' <<<'.....string.....'
Przykład:
% 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
Błędy obsługi:
W skrypcie możesz poradzić sobie z przypadkiem, w którym nie ma zgodności, innymi słowy, gdy oryginalny ciąg nie zawiera spring.profiles.active=
. W powyższym sed
przykładzie otrzymujesz cały oryginalny ciąg, co może powodować problemy:
% 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
Jeśli wolisz uzyskać pusty ciąg, gdy nie ma zgodności, dodaj -n
opcję do sed
polecenia i p
opcję do sed
s
polecenia, w następujący sposób:
% 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
Następnie możesz sprawdzić, czy $ var jest puste, czy nie.