timestamp - 正则表达式从一种格式更改为另一种格式

时间:2014-06-10 15:46:31

标签: regex linux awk sed timestamp

我有一个文件:START.txt,其中包含以下行:

13.03.2013 12:13:42|STRING1|NUMBER1|NUMBER2|NUMBER3

我希望将此文件中的所有行更改为以下格式:

12:13|STRING1|NUMBER1|NUMBER2|NUMBER3

如何做到这一点?

4 个答案:

答案 0 :(得分:3)

这是awk

awk '{sub(/:[0-9]+\|/,"|",$2);print $2}' file
12:13|STRING1|NUMBER1|NUMBER2|NUMBER3

只需从第二部分删除秒并打印即可。

答案 1 :(得分:2)

试试这个GNU sed命令,

$ sed -r 's/^[^ ]+? ([0-9]{2}:[0-9]{2}):[0-9]{2}(.*)$/\1\2/g' file
12:13|STRING1|NUMBER1|NUMBER2|NUMBER3

通过awk,

$ awk -F'|' -v OFS='|' '{sub (/^[^ ]+? /,"",$1); sub (/:[0-9]{2}$/,"",$1);}1' file
12:13|STRING1|NUMBER1|NUMBER2|NUMBER3

答案 2 :(得分:1)

使用此模式应匹配每一行并捕获您希望保留的部分:

^\d{2}\.\d{2}\.\d{4}\s(.*)$

您可以在此处查看模式的示例:http://regexr.com/38vq0

答案 3 :(得分:1)

使用awk

$ awk 'BEGIN{FS=OFS="|"}{split($1,fld,/[.: ]/);$1=fld[4]":"fld[5]}1' file
12:13|STRING1|NUMBER1|NUMBER2|NUMBER3
  • 将输入和输出字段分隔符设置为|
  • 拆分空格中的第一列.:,并将值放入数组fld中。
  • 将第1列重构为所需的数组值
  • 使用1打印该行(这是说{print $0}的惯用方式。