如何在Bash中提取Java属性文件指定键对应的无引号值?
解决Bash中提取Java属性文件值时的引号问题
嘿,我明白你遇到的麻烦了——在Bash里提取Java属性文件的oracle.driver值时,总是带着双引号,用sed试了也没搞定对吧?别担心,给你几个实用的方法,轻松拿到纯driver1字符串:
方法1:用awk处理(兼容性拉满)
awk是处理这种键值对文本的好手,不管属性值带不带引号都能搞定:
awk -F'=' '/^oracle.driver=/ { gsub(/"/, "", $2) # 把所有双引号都删掉 print $2 }' your-app.properties
简单说下逻辑:
-F'='把等号当成字段分隔符,这样$2就是等号后面的内容/^oracle.driver=/只挑以oracle.driver=开头的行,避免匹配到其他相似的键gsub直接把$2里的双引号清空,最后打印出来就是纯值了
方法2:精准适配引号的sed写法
如果你的属性值明确是用双引号包起来的,用sed的捕获组可以一步到位:
sed -n 's/^oracle.driver="\(.*\)"/\1/p' your-app.properties
解释下:
-n让sed只输出我们匹配到的行,不会乱输出其他内容s/^oracle.driver="\(.*\)"/\1/p这里的\(.*\)是捕获组,把"driver1"中间的driver1抓出来,用\1替换掉整行,最后打印这个捕获组的内容
要是你想兼容更多情况——比如等号后面有空格、属性值没加引号,就用这个更通用的版本:
sed -n 's/^oracle.driver=\s*"\?\([^"]*\)"\?/\1/p' your-app.properties
它会自动忽略等号后的空格,不管有没有引号都能准确提取值。
方法3:GNU grep快速提取(简洁高效)
如果你用的是Linux系统(自带GNU grep),可以用这个超简洁的命令:
grep -Po '^oracle.driver=\s*"\?\K[^"]*' your-app.properties
原理很简单:
-P启用Perl正则,-o只输出匹配到的部分\K相当于“忽略前面匹配的内容”,所以前面的oracle.driver=、空格、可选的引号都被跳过,直接输出后面的纯属性值
内容的提问来源于stack exchange,提问作者dr jerry
相关产品推荐
相关产品推荐

