Dav*_*ave 2 linux bash awk date sed
这是我拥有的一堆文件中的日期格式
$cat ./file.log
20220405T130001 message1
20220405T130002 message2
20220405T130003 message3
20220405T130004 message4
20220405T130005 message5
Run Code Online (Sandbox Code Playgroud)
我可以通过这样做将其转换为可用的日期格式:
$cat ./file.log | sed 's/^\(.\{4\}\)/\1-/' | sed 's/^\(.\{7\}\)/\1-/' | sed 's/\(.\{10\}\)./\1 /' | sed 's/^\(.\{13\}\)/\1:/' | sed 's/^\(.\{16\}\)/\1:/
2022-04-05 13:00:01 message1
2022-04-05 13:00:02 message2
2022-04-05 13:00:03 message3
2022-04-05 13:00:04 message4
2022-04-05 13:00:05 message5
Run Code Online (Sandbox Code Playgroud)
这看起来效率很低。在 bash 中是否有更简单/更好的方法来完成此任务?
更改的规则如下
-在前 4 个字符后插入-在上一条规则后的下 2 个字符后插入-在上一条规则后的下 2 个字符后插入T为 上一条规则后的下 2 个字符:在上一条规则后的下 2 个字符后插入:在上一条规则后的下 2 个字符后插入假设您始终在输入文件中获得相同的格式,则单个 sed 可以使用多个捕获组来处理此问题:
sed -E 's/^(.{4})(..)(..)T(..)(..)/\1-\2-\3 \4:\5:/' file
2022-04-05 13:00:01 message1
2022-04-05 13:00:02 message2
2022-04-05 13:00:03 message3
2022-04-05 13:00:04 message4
2022-04-05 13:00:05 message5
Run Code Online (Sandbox Code Playgroud)