【问题标题】:Bash script: Appending text at the last character of specific line of a fileBash脚本:在文件特定行的最后一个字符处附加文本
【发布时间】:2011-05-05 19:58:10
【问题描述】:

我正在尝试在来自 bash 脚本的文件的特定行的最后一个字符处附加一个变量。

该文件名为myfile.txt,我想做的是在包含唯一字符串MYVERSION 的文件行的最后一个字符之后附加一个名为VERSION 的变量的内容。

也就是说,如果在这一行中有以下内容:

MYVERSION=0.1

然后VERSION="-custom_P1",我想要以下内容:

MYVERSION=0.1-custom_P1

感谢大家的帮助。

【问题讨论】:

  • 我还想做的是能够恢复"MYVERSION"的初始值。我设法将它存储在一个名为"OLD_MY_VERSION" 的变量中,但是当我尝试使用sed -i "/^MYVERSION=/ c\$$OLD_MY_VERSION myfile.txt 恢复时,我得到的是"$MYVERSION=0.1" 而不是"MYVERSION=0.1"(当然没有引号)。关于如何删除额外字符($)的任何想法?如果我不放额外的 $,我不会在替换中获得 "OLD_MY_VERSION" 变量的内容,而只是 "$OLD_MY_VERSION"

标签: linux bash append


【解决方案1】:

试试这个:

sed -i "/^MYVERSION=/ s/\$/$VERSION/" myfile.txt

这个想法是它找到以 MYVERSION= 开头的行,然后将该行的末尾替换为 $VERSION 环境变量的内容。

编辑:最初我不确定第一个$ 是否需要转义,但@sehe 的评论及其支持者说服了我。

【讨论】:

  • 哦..当然,在您键入的 sed 命令的末尾会加上文件名(即 myfile.txt),以防万一有人想知道!
  • @limp:感谢您指出这一点,我在命令末尾添加了myfile.txt
【解决方案2】:

试试

sed -e "s/^MYVERSION=/MYVERSION=.*$/&${VERSION}/g" < myfile.txt

该命令将 VERSION 的值附加到带有 'MYVERSION=' 的行

【讨论】:

  • 我认为你误读了这个问题:VERSION 已经是一个 shell 变量。
猜你喜欢
  • 2011-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多