我正在使用 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
用空格分隔两组两个数字。