如何在具有许多此类对的文本文件中附加键值对中的值文本

如何在具有许多此类对的文本文件中附加键值对中的值文本

我有一个包含内容的文本文件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

其中startend给出了命令应应用到的行范围,以起始地址和结束地址的形式给出(“地址”可以是行号或正则表达式,或偏移量)。使用单个地址时,该命令仅应用于该行(或应用于与特定正则表达式匹配的单行)。

答案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

相关内容