如何基于regex Linux更改文件中的行段

时间:2018-02-05 06:09:19

标签: linux sed

我有一个文件,其中每行以特定的日志信息开头。这是一个例子:

12-May 02:01:18:INFO:root:restapid=>someurlhere
12-May 02:01:19:INFO:root:response=>loremipsum

我想抓住这些时间信息并将其替换为当前日期和时间。我能够通过使用egrep获得目标部分但不幸的是我找不到改变它的方法(可能是因为我不熟悉sed)。我怎样才能做到这一点 ?我的egrep解决方案如下:

egrep '^[0-9]+-[a-Z]+ [0-9]+:[0-9]+:[0-9]+'weblog.api

如果我可以管理这个部分,我想把这个命令分配给我的bashrc中的一个函数(或别名),当我运行它时,我想通过调用像

这样的东西来改变当前时间的所有时间信息
sample_alias weblog.api 

所需的输出格式如下(让我们说现在的时间是04 Feb 05:02:03。我相信我可以通过date "+%y%m%d%H%M"命令得到时间信息)

    05-Feb 05:02:03:INFO:root:restapid=>someurlhere
    05-Feb 05:02:03:INFO:root:response=>loremipsum

1 个答案:

答案 0 :(得分:0)

cat v1
12-May 02:01:18:INFO:root:restapid=>someurlhere
12-May 02:01:19:INFO:root:response=>loremipsum


sed 's/[0-9]*-[a-Z]* [0-9]*:[0-9]*:[0-9]*/'"$(date +"%d-%b %H:%M:%S")"'/g' v1
05-Feb 06:21:30:INFO:root:restapid=>someurlhere
05-Feb 06:21:30:INFO:root:response=>loremipsum