如何使用变量搜索以匹配任何字符串-Shell

时间:2018-10-25 15:20:41

标签: shell unix

如何使用变量搜索部分字符串并将其分配给新变量

我的搜索变量是: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

2 个答案:

答案 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