Extract values from a property file using bash

泄露秘密 提交于 2021-02-10 16:56:14

问题


I have a variable which contains key/values separated by space:

echo $PROPERTY 

server_geo=BOS db.jdbc_url=jdbc\:mysql\://mysql-test.com\:3306/db02 db.name=db02 db.hostname=/mysql-test.com datasource.class.xa=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource server_uid=BOS_mysql57 hibernate33.dialect=org.hibernate.dialect.MySQL5InnoDBDialect hibernate.connection.username=db02 server_labels=mysql57,mysql5,mysql db.jdbc_class=com.mysql.jdbc.Driver db.schema=db02 hibernate.connection.driver_class=com.mysql.jdbc.Driver uuid=a19ua19 db.primary_label=mysql57 db.port=3306 server_label_primary=mysql57 hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect 

I'd need to extract the values of the single keys, for example db.jdbc_url. Using one code snippet I've found:

echo $PROPERTY | sed -e 's/ db.jdbc_url=\(\S*\).*/\1/g'

but that returns also other properties found before my key. Any help how to fix it ? Thanks


回答1:


This is caused because you are using the substitute command (sed s/.../.../), so any text before your regex is kept as is. Using .* before db\.jdbc_url along with the begin (^) / end ($) of string marks makes you match the whole content of the variable.

In order to be totaly safe, your regex should be :

sed -e 's/^.*db\.jdbc_url=\(\S*\).*$/\1/g'




回答2:


If db.name always follow db.jdbc_url, then use grep lookaround,

$ echo "${PROPERTY}" | grep -oP '(?<=db.jdbc_url=).*(?=db.name)'
jdbc\:mysql\://mysql-test.com\:3306/db02

or add the VAR to an array,

$ myarr=($(echo $PROPERTY))
$ echo "${myarr[1]}" | grep -oP '(?<=db.jdbc_url=).*(?=$)'
jdbc\:mysql\://mysql-test.com\:3306/db02



回答3:


You can use grep for this, like so:

echo $PROPERTY | grep -oE "db.jdbc_url=\S+" | cut -d'=' -f2

The regex is very close to the one you used with sed. The -o option is used to print the matched parts of the matching line.

Edit: if you want only the value, cut on the '='
Edit 2: egrep say it is deprecated, so use grep -oE instead, same result. Just to cover all bases :-)



来源:https://stackoverflow.com/questions/52481733/extract-values-from-a-property-file-using-bash

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!