आप grepपीसीआरई ( -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
तब आप परीक्षण कर सकते हैं कि $ वर खाली है या नहीं।