首页 > 解决方案 > 如何从文件中获取一个值并忽略注释行?

问题描述

我正在尝试URL.env文件中获取的值,但忽略以开头的行#

我的 .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-)

但不知道如何指定我想从中获取值的变量

标签: regexbashsedgrep

解决方案


URL=您可以仅使用单个sed命令匹配以该文本开头的那些行并获取该文本之后的值:

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

在这里,-n禁止默认行输出,在匹配行的开头s/^URL=//删除(是字符串锚的开头)并打印结果,即之后的内容。URL=^pURL=

如果之前可以有空格URL=,您可以在[[:space:]]*之后添加^

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

@Sundeep 的基于 PCRE 的grep 命令的工作方式类似。grep -oP '^URL=\K.+' ./.envgrep -oP '^\s*URL=\K.+' ./.env将产生与上述sed命令相同的结果(在 PCRE 模式中,您可以将空格与\s速记字符类匹配)。


推荐阅读