Bạn có thể sử dụng grep
với PCRE ( -P
):
grep -Po 'spring.profiles.active=\K[^ ]+' <<<'.....string.....'
spring.profiles.active=
sẽ phù hợp với chuỗi con này theo nghĩa đen, \K
sẽ loại bỏ trận đấu
[^ ]+
sẽ chọn phần mong muốn tức là phần sau spring.profiles.active=
, cho đến không gian tiếp theo
Đối với một tập tin:
grep -Po 'spring.profiles.active=\K[^ ]+' file.txt
Thí dụ:
% 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
sẽ có logic tương tự:
sed -r 's/.*spring.profiles.active=([^ ]+).*/\1/' <<<'.....string.....'
Thí dụ:
% 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
Xử lý lỗi:
Trong tập lệnh của bạn, bạn có thể muốn xử lý trường hợp không khớp, nói cách khác là chuỗi gốc của bạn không chứa spring.profiles.active=
. Trong sed
ví dụ trên , bạn có được toàn bộ chuỗi gốc, có thể tạo ra các vấn đề:
% 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ếu bạn muốn có được chuỗi trống khi không có kết quả khớp, hãy thêm -n
tùy chọn vào sed
lệnh và p
tùy chọn cho sed
s
lệnh, như sau:
% 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
Sau đó, bạn có thể kiểm tra xem $ var có trống hay không.