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

时间:2013-12-13 14:08:11

标签: linux bash replace sed

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

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

VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE5
VAR6=VALUE6

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

5 个答案:

答案 0 :(得分:43)

你可以尝试这个sed:

sed -i.bak 's/^\(VAR5=\).*/\1VALUE10/' file

它给出了:

VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6

答案 1 :(得分:4)

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

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

<强> 说明:

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

答案 2 :(得分:3)

你可以说:

sed '/^VAR5=/s/=.*/=VALUE10/' filename

要更改文件就地,请使用-i选项:

sed -i '/^VAR5=/s/=.*/=VALUE10/' filename

答案 3 :(得分:1)

sed '/\(^VAR5=\).*/ s//\1VALUE10/' YourFile

在AIX / KSH下

$ cat sample.txt
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE5
VAR6=VALUE6

$ sed '/\(^VAR5=\).*/ s//\1VALUE10/' sample.txt
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6

并在文件中替换

cat <> YourFile | sed '/\(^VAR5=\).*/ s//\1VALUE10/'

$ cat <> sample.txt | sed '/\(^VAR5=\).*/ s//\1VALUE10/'
$ cat sample.txt
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6

要成为POSIX(在sed部分,而不是cat)兼容(sed --posix on gnu sed and natively traditionnal sed on non linux system)

答案 4 :(得分:0)

尝试以下

sed -r's / ^(VAR5 =)。* / \ 1REPLACEMENT /'

VAR5的值将替换为REPLACEMENT。