如何使用sed替换配置文件的变量?

Som*_*ter 28 linux bash replace sed

我一直在网上寻找这个答案,似乎无法找到它.

我有一个包含以下内容的配置文件:

VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE5
VAR6=VALUE6
Run Code Online (Sandbox Code Playgroud)

我想将VAR5的值从VALUE5更改为VALUE10.不幸的是,我不知道VALUE5的价值所以我无法搜索它.所以基本上我需要使用sed(或其他)将VAR5的值替换为我想要替换它的任何值.

anu*_*ava 44

你可以尝试这个sed:

sed -i.bak 's/^\(VAR5=\).*/\1VALUE10/' file
Run Code Online (Sandbox Code Playgroud)

它给:

VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6
Run Code Online (Sandbox Code Playgroud)

  • +1.我只是想提供另一个,一个更简单(但不那么有效,只有当我们确切地知道开头才有效):`sed -i.bak's/^ VAR5 =.*/VAR5 = VALUE10 /'file` (5认同)
  • 在您的示例中,“ VAR5”的值为“ VALUE5”,并且此答案不需要知道“ VALUE5” (2认同)
  • 哦,我的错误.我读得太快了.对于那个很抱歉.谢谢你纠正我. (2认同)

Kan*_*thy 7

即使答案已添加到问题中。我花了一些时间研究它是如何工作的,我想添加一些事实和我的答案版本,

sed -i 's,^\(THISISMYVARIABLE[ ]*=\).*,\1'THISISMYVALUE',g' config.cfg
Run Code Online (Sandbox Code Playgroud)

解释:

  • 作为 的基础sed 's/find_this/replace_with/',我们说 sed 来搜索和替换。还要记住,我们可以使用多个其他分隔符来代替/. 这里,使用。
  • 在这里我们找到匹配的行^\(THISISMYVARIABLE[ ]*=\).*。这意味着我们正在对比赛进行分组THISISMYVARIABLE[ ]*=。([ ]*如果键后有空格,则覆盖)
  • 在替换部分\1是一个反向引用。我们正在引用我们用于匹配的正则表达式中的第一组。

  • @Kannan,谢谢!当我加入 SO 时,我是个菜鸟,我认为将答案放在问题中是个好主意,因此我将其删除。 (2认同)