我有一个名为log.txt的日志文件
我的目标是仅在文件log.txt中的最后一个string:“Number”之后添加参数:$ 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的内容