Anda dapat menggunakan grep
dengan PCRE ( -P
):
grep -Po 'spring.profiles.active=\K[^ ]+' <<<'.....string.....'
spring.profiles.active=
akan cocok dengan substring ini secara harfiah, \K
akan membuang pertandingan
[^ ]+
akan memilih bagian yang diinginkan yaitu bagian setelah spring.profiles.active=
, hingga ruang berikutnya
Untuk file:
grep -Po 'spring.profiles.active=\K[^ ]+' file.txt
Contoh:
% 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
akan mengambil logika serupa:
sed -r 's/.*spring.profiles.active=([^ ]+).*/\1/' <<<'.....string.....'
Contoh:
% 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
Menangani kesalahan:
Dalam skrip Anda, Anda mungkin ingin menangani case di mana tidak ada kecocokan, dengan kata lain di mana string asli Anda tidak mengandung spring.profiles.active=
. Dalam sed
contoh di atas , Anda mendapatkan seluruh string asli, yang dapat menimbulkan masalah:
% 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
Jika Anda lebih suka mendapatkan string kosong ketika tidak ada kecocokan, tambahkan -n
opsi ke sed
perintah dan p
opsi ke sed
s
perintah, seperti ini:
% 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
Kemudian Anda dapat menguji apakah $ var kosong atau tidak.