更改日期格式并附加到原始文件

更改日期格式并附加到原始文件

我有这样的文件,名为 a.txt:

[2016-03-30T04:51:51.599-04:00]!ER_DEV!Port_Conflict!/u05/app/
[2016-01-20T04:30:21.885-04:00]!ER_DEV!Port_Conflict!/u05/app/

我需要修改它,使其看起来像:

  2016-03-30 04:51:51!ER_DEV!Port_Conflict!/u05/app/
  2016-01-20 04:30:21!ER_DEV!Port_Conflict!/u05/app/

我已经编写了一个命令将 [2016-03-30T04:51:51.599-04:00] 更改为 2016-03-30 04:51:51 。但是如何将查询输出附加到原始文件。

  awk -F'!' '{print $1}' a.txt | awk -F '[T.]' '{print $1 " " $2}' | awk '{gsub(/\[/,"")}1' 

答案1

这取决于您想要对模式匹配有多严格。如果您不太关心“流氓数据”,那么一个简单的方法sed

sed 's/^\[\(....-..-..\)T\(..:..:..\).......:..]/\1 \2/'

sed如果您有一个了解该标志的版本-i,那么您可以对文件进行就地更新

sed -i 's/^\[\(....-..-..\)T\(..:..:..\).......:..]/\1 \2/' a.txt

答案2

轻松完成sed

sed '
    s/T/ /      #exchange "T" by "space"
    s/\[/ /     #exchange "[" by "space"
    s/\..*\]//  #remove from "." till "]" included
    ' a.txt

但如果你更愿意awk

awk -F'[][]' '
    {
        split($2, a,"[T.]")
        $2=a[1]
        $3=a[2] $3
        print
    }
    ' a.txt

相关内容