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

klo*_*lod 4 sed

我的日志文件名为:log.txt

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

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

例子:

 PARAM=34.43435454
Run Code Online (Sandbox Code Playgroud)

尾部-10 log.txt

   date 12.3.2010 Number 2.34
   date 12.3.2010 Number 2.14
   date 12.3.2010 Number 34.43435454
Run Code Online (Sandbox Code Playgroud)

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

Den*_*son 5

每行“Number”之后:

sed "s/.*Number/& $PARAM/" log.txt
Run Code Online (Sandbox Code Playgroud)

最后一行“Number”之后:

sed "\$s/.*Number/& $PARAM/" log.txt
Run Code Online (Sandbox Code Playgroud)

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

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

上一版本的说明:

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