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

Jat*_*ani 5 shell shell-script

我有一个keyvalue.txt包含内容的文本文件:

one=abc
two=def
three=ghi
four=jkl
five=mno
six=pqr
Run Code Online (Sandbox Code Playgroud)

现在,我想附加xyz到three将成为的值

three=ghixyz
Run Code Online (Sandbox Code Playgroud)

生成的文件内容应该是:

one=abc
two=def
three=ghixyz
four=jkl
five=mno
six=pqr
Run Code Online (Sandbox Code Playgroud)

有没有办法在shell脚本中做到这一点?

Ste*_*itt 9

有几种方法;如用sed:

sed -i 's/^RELEASESTATUS=.*/&xyz/' keyvalue.txt
Run Code Online (Sandbox Code Playgroud)

这将查找以 开头的行RELEASESTATUS=,匹配整行(感谢.*),并将这些行替换为 ( &) 后跟的行的内容xyz。


Kus*_*nda 7

类似于Stephen's answer,但执行方式略有不同:

sed -i '/^RELEASESTATUS=/s/$/xyz/' keyvalue.txt
Run Code Online (Sandbox Code Playgroud)

这不是用在末尾添加一些文本的自身副本替换整行,而是首先定位正确的行(RELEASESTATUS=位于最开始的行),然后在该行的末尾替换所需的文本。

这使用了这样一个事实,即替代命令 ( s) in的一般形式sed是

start,end s/pattern/replacement/flags
Run Code Online (Sandbox Code Playgroud)

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