我一直在网上寻找这个答案,似乎无法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。