คุณสามารถใช้grep
กับ PCRE ( -P
):
grep -Po 'spring.profiles.active=\K[^ ]+' <<<'.....string.....'
สำหรับไฟล์:
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 ว่างเปล่าหรือไม่