shell 使用sed从文本文件中提取字符串

xjreopfe  于 2022-12-30  发布在  Shell
关注(0)|答案(3)|浏览(225)

我有一个名为.env的文本文件,如下所示:

SOME_VAR="value"
SOME_VAR_2="value2"
NODE_ENV="staging"
SOME_VAR_3="value3"

我需要提取""之间以NODE_ENV=开始的字符串
换句话说,我需要该文件中的字符串staging,然后我需要使用如下命令。
现在我有这个:

git checkout $(cat .environment)

其中.environment是一个只有一个值staging的文件,所以使用这个命令我得到了:

git checkout $(cat .environment)

但是现在我需要我之前所说的,从一个包含多行的文件中提取上述格式的值。
我尝试使用sed,但不确定如何使用:

sed -r '/NODE_ENV.*/I!d;s/.*:.(.*).}$/\1/' .env

但那是

NODE_ENV="staging"

我需要的是

staging
sxpgvts3

sxpgvts31#

regexp正在查找:字符,但文件中没有:。您应该查找="...",并使用捕获组匹配"之间的内容。

sed -n -r '/NODE_ENV/s/.*="(.*)"/\1/p' .env

使用-n选项禁用默认打印,然后将p附加到命令以在替换后打印匹配行。

agxfikkp

agxfikkp2#

您可以使用grep提取此值:

grep -Po '(?<=NODE_ENV=")[^"]*' .env

输出将为:

staging
wpx232ag

wpx232ag3#

您可以合并一些简单的命令:

grep NODE_ENV .env | sed -E 's/.*"(.*)"/\1/'

相关问题