从行中提取日期字段

从行中提取日期字段

我有一个这样的文件

Sampleoutput1[Fri Jun 10 06:11:59 2016]Local/ESSBASE0///139929633446208/Error(10
Sampleoutput1Local/ESSBASE0///139929633446208/[Fri Jun 11 06:11:59 2016]Error(10

我需要提取日期字段并将该日期添加为带有分隔符 ($) 的列。日期可以出现在文件中的任何位置。

[Fri Jun 10 06:11:59 2016]$Sampleoutput1[Fri Jun 10 06:11:59 2016]Local/ESSBASE0///139929633446208/Error(10
[Fri Jun 11 06:11:59 2016]$Sampleoutput1Local/ESSBASE0///139929633446208/[Fri Jun 11 06:11:59 2016]Error(10

答案1

假设日期始终包含在[...中,]并且这是该行的第一个,[我们可以使用多种方法。我常用的两个:

使用两个cut命令(惰性选项,但很容易理解它的作用):

cut -d'[' -f2 $srcfile | cut -d ']' -f1

标准sed选项,使用简单的正则表达式:

sed 's/.*\[\([^]]*\)].*/\1/' $srcfile

如果您的输出更复杂,[其中包含多个字符,那么您需要使用sed带有更复杂字符串的选项:

sed 's/.*\[\(... ... .. ..:..:.. ....\)].*/\1/' $srcfile

编辑:修改后的问题希望将其添加到字符串的前面,使该行的其余部分保持不变。因此我们使用sed稍加改动的变体:

sed 's/\(.*\[\(... ... .. ..:..:.. ....\)].*\)/[\2]$\1/' $srcfile

结果:

[Fri Jun 10 06:11:59 2016]$Sampleoutput1[Fri Jun 10 06:11:59 2016]Local/ESSBASE0///139929633446208/Error(10
[Fri Jun 11 06:11:59 2016]$Sampleoutput1Local/ESSBASE0///139929633446208/[Fri Jun 11 06:11:59 2016]Error(10

相关内容