添加

添加

我有一个文件 test.txt,其中包含如下行

values =  abc, def, dfg, ert, sdf, sfd, sdf   

我使用 shell 脚本在 test,txt 中的值中添加一个以逗号分隔的新值。

例如,我需要添加test.txt 中的“ghf”:

values =  abc, def, dfg, ert, sdf, sfd, sdf, ghf   

我还需要删除该值。

例如,如果我需要消除test.txt 中的“ert”:

values =  abc, def, dfg, sdf, sfd, sdf, ghf   

我怎样才能在shell脚本中实现这一点?

(IE)

如果我给

echo "abc" >> test.txt

它能够将“abc”附加到文件末尾,但我需要附加到 test.txt 中的“values=”字段

谢谢,
哈里

答案1

快速解决方案,无需防范极端情况。
(谢谢格伦·杰克曼用于sed优化。)

添加

sed -i "/^values = / s/$/, ${NEW_VALUE}/" test.txt

解释

sed -i- 在给定文件中进行更改,不打印到stdout.

/^values = /- 当sed位于以 开头的行上时values =

s/$/, ${NEW_VALUE}/- 附加, ${NEW_VALUE}在行尾。

test.txtsed-将对其执行操作的文件。

去除

sed -i "/^values = / s/ ${REMOVE_VALUE},\?//" test.txt

解释

s/ ${REMOVE_VALUE},\?//- 删除第一次出现的${REMOVE_VALUE}以及可选的后续,

此解决方案存在的问题

  1. 添加第一个值将,立即添加values =
  2. 删除最后一个值将留下以 结尾的行,
  3. 如果添加/删除的变量包含命令sed的分隔符s(在我的示例中是/),则命令将不起作用。

答案2

使用ed您可以执行以下操作:

ed -s test.txt <<<$'/values/s/$/,ghf\nw'   # add ghf to the end of line

ed -s values <<<$'/values/s/ert,//\nw'  # remove ert

相关内容