我一直在网上寻找这个答案,似乎无法找到它。
我有一个包含以下内容的配置文件:
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE5
VAR6=VALUE6
我想将VAR5的值从VALUE5更改为VALUE10。不幸的是,我不知道VALUE5的价值所以我无法搜索它。所以基本上我需要使用sed(或其他)将VAR5的值替换为我想要替换它的任何值。
答案 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。