![从行中提取日期字段](https://linux22.com/image/91626/%E4%BB%8E%E8%A1%8C%E4%B8%AD%E6%8F%90%E5%8F%96%E6%97%A5%E6%9C%9F%E5%AD%97%E6%AE%B5.png)
我有一个这样的文件
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