如何使用sed来replaceconfiguration文件的variables?

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

我有一个configuration文件,其中包含:

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

我想将VAR5的值从VALUE5更改为VALUE10。 不幸的是,我不知道VALUE5的价值,所以我无法search它。 所以基本上我需要使用sed(或其他)来replaceVAR5的值到我想要replace的值。

编辑:感谢确认的解决scheme,我能够在BASH中使用以下编辑我的configuration文件通过传递给bash脚本的参数。 斜杠被replace为逗号,因为我传递给脚本的参数将包含斜杠。

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

我的文件包含:

 THISISMYVARIABLE=SOMEOLDVALUE 

在bash中运行sed命令之后

 THISISMYVARIABLE=THISISMYVALUE 

你可以试试这个sed:

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

它给:

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

你可以说:

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

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

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

即使答案已经加入到这个问题中。 我花了一些时间,如何工作,我想补充一些事实和我的版本的答案,

 sed -i 's,^\(THISISMYVARIABLE[ ]*=\).*,\1'THISISMYVALUE',g' config.cfg 
  • 作为sed 's/find_this/replace_with/' ,我们说sed来搜索和替换。 还要记住,还有其他多个分隔符可以用来代替/ 。 在这里,被使用。
  • 这里我们找到匹配^\(THISISMYVARIABLE[ ]*=\).* 。 这意味着我们正在将匹配THISISMYVARIABLE[ ]*=分组。 ( [ ]*以覆盖密钥后面是否有空格)
  • 在替换部分\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在gnu sed上使用,在非linux系统上使用--posix sed)

尝试以下

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

VAR5的值将替换为REPLACEMENT。