“sed”日期格式问题

“sed”日期格式问题

我正在使用 shell 脚本从数据库获取文件。运行 shell 脚本后数据如下所示。这是一个管道分隔的数据文件。

4676004||2017-09-2900:00:00|13222|0|XYZ|TTTTT||1855467|S|14671 

使用 spool 生成文件后,下面是我运行的用于格式化数据的命令。

sed -i -E 's/[[:blank:]]+(||$)/\1/g' Test.txt.  

但问题是日期数据

2017-09-2900:00:00,我需要这样的2017-09-29 00:00:00

我需要在日期和时间之间留出空间。如何做到这一点?

答案1

做就是了。

sed 's/....-..-../& /' infile

假设总有一种模式可以与xxxx-xx-xx格式匹配。

或者首先在 SQL 中您需要告诉substr命令select来为您完成这项工作。

select ... '|' || substr(mydate,1,10) || subtsr(mydate,11,8) || '|'  ...

答案2

$ sed -E 's/([0-9]{2})([0-9]{2}):/\1 \2:/' file
4676004||2017-09-29 00:00:00|13222|0|XYZ|TTTTT||1855467|S|14671

这是假设输入行中 a 之前出现四位数字的唯一位置:是在日期字符串中。替换sed用空格分隔两组两个数字。

相关内容