如何在跳过最后N个字符后在每行末尾添加文本

时间:2016-11-08 10:51:48

标签: linux vim sed

我在Linux命令行上,我的日志文件包含以下内容

Subscription Service Shutdown at 9:59PM UTC
Subscription Service Restarted at 11:57PM UTC

我想在每个行的时间戳之前添加日期

Subscription Service Shutdown at 01 Oct 2016 9:59PM UTC
Subscription Service Restarted at 01 Oct 2016 11:57PM UTC

4 个答案:

答案 0 :(得分:2)

vim方式:

:%s/ at /&knownString/

答案 1 :(得分:1)

这样的事情:

sed -r“s /([0-9] + {1}:[0-9] + {1} [AZ] {2}。* $)/ 2016年10月1日\ 1 / g”测试。 txt> new.txt

text.txt是你的日志文件,“2016年10月1日”是你的文字,\ 1是从小组赛中插回来的时间。

答案 2 :(得分:0)

你可以尝试这样的事情;

 echo "Subscription Service Shutdown at 9:59PM UTC"  | sed "s/at */at $(date '+%Y %b %d') /"

例如

$ echo "Subscription Service Shutdown at 9:59PM UTC"  | sed "s/at */at $(date '+%Y %b %d') /" 
Subscription Service Shutdown at 2016 Nov 08 9:59PM UTC

答案 3 :(得分:0)

vim

中执行此操作的不同方法

1)在at

之后添加字符串
:%s/at \zs/01 Oct 2016 /


2)找到格式为HH:MM的时间字符串,后跟AM UTCPM UTC并添加字符串。如果您只需要在行尾

匹配,请添加$锚点
:%s/\v(\d{1,2}:\d{1,2}[AP]M UTC)/01 Oct 2016 \1/