Как получить одно значение из файла и игнорировать закомментированные строки? - PullRequest
2 голосов
/ 03 мая 2020

Я пытаюсь получить значение URL из файла .env, но игнорирую строки, начинающиеся с #

my .env

URL=staging
#URL=prod
OTHER_VAR=test

Я пытаюсь чтобы сохранить значение URL внутри переменной, используя grep

Вот что у меня есть:

MY_VAR=$(grep URL ./.env | cut -d '=' -f 2-)

Я пытался использовать:

MY_VAR=$(grep -v '^#' ./.env | cut -d '=' -f 2-)

но не знаю, как указать, какую переменную я хочу получить из

1 Ответ

4 голосов
/ 03 мая 2020

Вы можете сопоставить те строки, которые начинаются с URL= и получить значение после этого текста, используя только одну команду sed:

MY_VAR="$(sed -n 's/^URL=//p' ./.env)";

Здесь -n подавляет вывод строки по умолчанию, s/^URL=// удаляет URL= в начале совпавшей строки (^ - начало привязки строки), а p печатает результат, то есть, что после URL=.

Если есть возможность быть пробелом до URL=, вы можете добавить [[:space:]]* после ^:

MY_VAR="$(sed -n 's/^[[:space:]]*URL=//p' ./.env)";

@ Sundeep's PCRE-based grep работает аналогично. grep -oP '^URL=\K.+' ./.env или grep -oP '^\s*URL=\K.+' ./.env будут давать те же результаты, что и вышеприведенные команды sed (в шаблоне PCRE вы можете сопоставлять пробелы с \s сокращенным классом символов).

...