我有一个包含内容的文本文件keyvalue.txt
:
one=abc
two=def
three=ghi
four=jkl
five=mno
six=pqr
现在,我想附加到将成为xyz
的值three
three=ghixyz
生成的文件内容应该是:
one=abc
two=def
three=ghixyz
four=jkl
five=mno
six=pqr
有什么办法可以在 shell 脚本中做到这一点吗?
答案1
有几种方法;例如和sed
:
sed -i 's/^RELEASESTATUS=.*/&xyz/' keyvalue.txt
这会查找以 开头的行RELEASESTATUS=
,与整行匹配(感谢.*
),并将这些行替换为 ( ) 行的内容,&
后跟xyz
。
答案2
如同斯蒂芬的回答,但执行方式略有不同:
sed -i '/^RELEASESTATUS=/s/$/xyz/' keyvalue.txt
它不是用自身的副本替换整行,并在末尾添加一些文本,而是首先找到正确的行(RELEASESTATUS=
最开始的行),然后在该行的末尾替换所需的文本。
s
这利用了以下事实:替代命令 ( )的一般形式sed
是
start,end s/pattern/replacement/flags
其中start
和end
给出了命令应应用到的行范围,以起始地址和结束地址的形式给出(“地址”可以是行号或正则表达式,或偏移量)。使用单个地址时,该命令仅应用于该行(或应用于与特定正则表达式匹配的单行)。
答案3
您还可以尝试awk
:
awk 'BEGIN { FS = OFS = "=" }; $1 == "RELEASESTATUS" { $2 = $2"xyz"; }; 1' keyvalue.txt
如果您有GNU awk 4.1.0
或以后可以就地进行:
gawk -i inplace -v INPLACE_SUFFIX=.bak 'BEGIN { FS = OFS = "=" }; $1 == "RELEASESTATUS" { $2 = $2"xyz"; }; 1' keyvalue.txt