sed +追加最后一个匹配字符后面的数字

我有一个名为log.txt的日志文件

我的目标是仅在文件log.txt中的最后一个string:“Number”之后添加参数:$ PARAM

  • 备注:PARAM可以是任何数字

例:

PARAM=34.43435454 

尾-10log.txt

  date 12.3.2010 Number 2.34 date 12.3.2010 Number 2.14 date 12.3.2010 Number 34.43435454 

有人有想法如何用sed做到这一点?

在每行上的“数字”之后:

 sed "s/.*Number/& $PARAM/" log.txt 

在最后一行“Number”之后:

 sed "\$s/.*Number/& $PARAM/" log.txt 

在“数字”上次出现在文件中后:

 sed "/Number/!b;:a;\$!N;/\n.*Number/{h;s/\n[^\n]*\$//p;g;s/^.*\n//};\$!ba;s/^\(.*Number \)/\1$PARAM/" log.txt 

最后一个版本的解释:

  • /Number/!b – 如果行不包含“Number”分支到脚本的末尾并打印行
  • :a – 循环标签“a”
    • \$!N – 如果它不是文件的最后一行,则将下一行追加到模式空间内容的末尾
    • /\n.*Number/{ – 如果模式空间在换行符之后包含“Number”
      • h – 复制模式空间以容纳空间
      • s/\n[^\n]*\$//p – 删除换行符后的部分并打印剩余部分
      • g – 将空间复制到模式空间
      • s/^.*\n//} – 删除换行符之前的部分,结束if
  • \$!ba – 分支标签“a”
  • s/^\(.*Number \)/\1$PARAM/ – 在“Number”之后添加variables的内容