我有一个弦
00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -Dspring.profiles.active=qa -XX:MaxPermSize=256
并要提取的词qa
后面-Dspring.profiles.active
。
我将字符串保存在文件text.txt中只是为了对其进行演示。
当我做
grep -r -o "spring.profiles.active=" text.txt
结果是 spring.profiles.active=
这个词并不总是存在的qa
,它可能是prod
或dev
。
我想做的就是找到单词spring.profiles.active
,然后将其=
提取出来。
我想使用shell脚本,因为我使用这个词来配置服务器上的其他项目。
这可能吗,如果可以,我该怎么做。
您可以grep
与PCRE(-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
然后,您可以测试$ var是否为空。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句