![更改日期格式并附加到原始文件](https://linux22.com/image/94586/%E6%9B%B4%E6%94%B9%E6%97%A5%E6%9C%9F%E6%A0%BC%E5%BC%8F%E5%B9%B6%E9%99%84%E5%8A%A0%E5%88%B0%E5%8E%9F%E5%A7%8B%E6%96%87%E4%BB%B6.png)
我有这样的文件,名为 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