sed +在行中最后一个匹配的单词后附加数字

sed +在行中最后一个匹配的单词后附加数字

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

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

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

例子:

 PARAM=34.43435454

tail -10 日志.txt

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

有人知道如何用 sed 做到这一点吗?

答案1

每行的“Number”之后:

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

在最后一行的“Number”之后:

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

在文件中最后一次出现的“Number”之后:

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/{- 如果模式空间在换行符后包含“数字”,则
      • h- 将模式空间复制到保存空间
      • s/\n[^\n]*\$//p- 删除换行符后的部分并打印剩余部分
      • g- 将保持空间复制到模式空间
      • s/^.*\n//}- 删除换行符之前的部分,结束
  • \$!ba- 分支标记为“a”
  • s/^\(.*Number \)/\1$PARAM/- 在“Number”后添加变量的内容

相关内容