sed 提取匹配的子字符串

sed 提取匹配的子字符串

我有一个文本文件,名称.env如下:

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

我需要提取之间的字符串""行开头的位置NODE_ENV=

换句话说,我需要staging该文件中的字符串。

我尝试过sed但我不知道如何使用它:

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

但那是:

NODE_ENV="staging"

我需要有

staging

答案1

你可以用 sed 做这样的事情:

$ sed -n '/^NODE_ENV/s/^[^"]*"\([^"]*\)"$/\1/p' .env
staging

  • -n:抑制打印。
  • /^NODE_ENV/:选择以 开头的行NODE_ENV
  • ^[^"]*"\([^"]*\)"$:选择所有不是"从行首开始的 字符"^[^"]*"),然后捕获所有后面不是"\([^"]*\))的字符,最后选择"末尾的("$)。
  • /\1/p:将所有内容替换为捕获的组 ( \1) 并打印 ( p)。

使用 awk

$ awk -F'"' '/^NODE_ENV/ { print $2 }' .env
staging

  • -F'"':用作"分隔符。
  • /^NODE_ENV/:选择以 开头的行NODE_ENV
  • { print $2 }打印第二列。

相关内容