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