Есть много способов сделать это. Вы можете использовать awk
, который я лично использовал бы, так как он похож на нож x-acto для такого типа вещей:
uid=$(awk -F"[=;]" '/UID/{print $2}' env.txt)
pwd=$(awk -F"[=;]" '/PWD/{print $2}' env.txt)
или grep
и sed
. sed
приятно, потому что позволяет вам получить очень конкретную информацию, которую вы хотите вырезать из строки, но это регулярное выражение, которое имеет свою кривую обучения:
uid=$(grep "UID" env.txt | sed -r 's/^.*=(.*)(;|$)/\1/g' )
pwd=$(grep "PWD" env.txt | sed -r 's/^.*=(.*)(;|$)/\1/g' )
Как отметил @JamesK в комментариях, вы можете использовать sed
, и он будет выполнять поиск вместо grep
. Это супер приятно, и я бы определенно выбрал это вместо grep | sed
.
uid=$(sed -nr '/UID/s/^.*=(.*)(;|$)/\1/gp' )
pwd=$(sed -nr '/PWD/s/^.*=(.*)(;|$)/\1/gp' )
или grep
и cut
. Блеф ... мы все можем сделать лучше, но иногда мы просто хотим grep
и cut
и не должны думать об этом:
uid=$(grep "UID" env.txt | cut -d"=" -f2 | cut -d";" -f1)
pwd=$(grep "PWD" env.txt | cut -d"=" -f2 | cut -d";" -f1)
Я бы точно не пошел по номеру строки. Это похоже на файл odbc.ini и порядок, в котором параметры перечислены в каждой записи odbc, не имеет значения.