Как искать, используя переменную, чтобы соответствовать любой строке - оболочка - PullRequest
0 голосов
/ 25 октября 2018

Как искать часть строки, используя переменную, и назначать ее новым переменным

Моя переменная поиска: 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 голосов
/ 25 октября 2018

Здесь еще один способ распечатать значения.

$ 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 эти переменные в текущей оболочке, то используйте следующее, которое добавляет 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
0 голосов
/ 25 октября 2018

Попробуйте:

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

Дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...