如何使用变量搜索部分字符串并将其分配给新变量
我的搜索变量是:db_uni_name=testdb_iac3bd
我的Oratab文件是:
+ASM1:/u01/app/12.2.0.1/grid:N
oidiaddb:/u02/app/oracle/product/12.2.0/dbhome_2:Y
testdb:/u02/app/oracle/product/12.2.0/dbhome_3:Y
oradb:/u02/app/oracle/product/12.2.0/dbhome_4:Y
我想搜索$db_uni_name
来找到匹配的数据库名称和路径
在这种情况下,我要搜索testdb并分配如下:
DB_NAME=testdb
ORACLE_HOME=/u02/app/oracle/product/12.2.0/dbhome_3
答案 0 :(得分:1)
尝试一下:
mayankp@mayank:~/Documents$ DB_NAME=$(echo $db_uni_name | grep `awk -F'_' '{print $1}'` Oratab.txt | awk -F ':' '{print $1}')
mayankp@mayank:~/Documents$ echo $DB_NAME
testdb
mayankp@mayank:~/Documents$ ORACLE_HOME=$(echo $db_uni_name | grep `awk -F'_' '{print $1}'` Oratab.txt | awk -F ':' '{print $2}')
mayankp@mayank:~/Documents$ echo $ORACLE_HOME
/u02/app/oracle/product/12.2.0/dbhome_3
让我知道这是否有帮助。
答案 1 :(得分:0)
这是打印值的另一种方法。
$ awk -F: -v patt=${db_uni_name%_*} \
'$0~patt{print "DB_NAME="$1; print "ORACLE_HOME="$2}' inputFile
DB_NAME=testdb
ORACLE_HOME=/u02/app/oracle/product/12.2.0/dbhome_3
它使用%_*
将testdb
与_iac3d
分开。然后使用awk
搜索和打印。
如果您想export
在当前shell中使用这些变量,请使用以下命令,该命令将export
添加到打印结果中,然后使用$()
$ $(awk -F: -v patt=${db_uni_name%_*} '$0~patt{print "export DB_NAME="$1; print "export ORACLE_HOME="$2}' inputFile)
$ echo $DB_NAME
testdb
$ echo $ORACLE_HOME
/u02/app/oracle/product/12.2.0/dbhome_3