【问题标题】:How to add text at the end of each line after skipping Last N characters跳过最后 N 个字符后如何在每行末尾添加文本
【发布时间】:2017-03-21 23:14:11
【问题描述】:

我在 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

【问题讨论】:

  • 你尝试了什么?
  • 您正在尝试添加已知字符串01 Oct 2016 或当前日期?
  • 我将添加已知字符串

标签: linux vim sed


【解决方案1】:

vim 方式:

:%s/ at /&knownString/

【讨论】:

    【解决方案2】:

    类似这样的:

    sed -r "s/([0-9]+{1}:[0-9]+{1}[AZ]{2}.*$)/01 Oct 2016 \1/g" 测试。 txt > new.txt

    其中 text.txt 是您的日志文件,“01 Oct 2016”是您的文本,\1 是从组匹配中插入回来的时间。

    【讨论】:

      【解决方案3】:

      你可以试试这样的;

       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
      

      【讨论】:

        【解决方案4】:

        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/
        

        【讨论】:

          猜你喜欢
          • 2016-08-23
          • 1970-01-01
          • 2013-04-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-06
          • 2016-05-03
          • 2017-04-10
          相关资源
          最近更新 更多