我有一个日志文件名为: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”后添加变量的内容