如何使用 bash 脚本从 .env 中删除或替换键值

JN_*_*bie 4 bash shell

我正在尝试使用 bash 脚本删除该值或替换 .env 文件中的值

在我的 .env 文件中

TEST_VAR=testVariable
Run Code Online (Sandbox Code Playgroud)

我已使用以下脚本使用 bash 脚本插入了此 TEST_VAR

#!/bin/bash
echo TEST_VAR="testVariable" >> .env
Run Code Online (Sandbox Code Playgroud)

问题是,如果我再次运行 bash 脚本,它将在 .env 中多次输入 TEST_VAR 。我如何替换该值或删除该密钥对值。

例如

如果我再次运行具有更改值的 bash 脚本

#!/bin/bash
echo TEST_VAR="updateValue" >> .env
Run Code Online (Sandbox Code Playgroud)

它应该显示在 .env 文件中

TEST_VAR=更新值

而不是低于

TEST_VAR=测试变量 TEST_VAR=更新值

Pie*_*ois 9

尝试一下,假设您要更新的 .env 是file.env

sed -i~ '/^TEST_VAR=/s/=.*/="UpdateValue"/' file.env
Run Code Online (Sandbox Code Playgroud)

说明:该命令sed -i~能够就地编辑文件;即无需复印。文件的旧版本将转到file.env~.

该命令s/=.*/="UpdateValue"/更改=to之后的所有内容="UpdateValue"。该命令仅适用于以 开头的行,该行是通过在上面的命令前TEST_VAR=添加正则表达式来表达的。/^TEST_VAR=/sed

  • 如果您使用的是 BSD 或 Mac,则需要 `-i ''` 而不仅仅是 `-i`。 (3认同)
  • @PierreFrançois 这在语法上与“-i”相同。你能做的就是显式传递一个参数,比如“-i~”;这会创建一个备份文件,但可以在 Linux 和 *BSD 之间合理移植。至少在您可以验证该命令是否正常工作之前,这可以说是一个很好的保护措施。或者只是省略“-i”选项并解释如何根据要求将其添加回不同的平台。 (3认同)