使用sed在第8列的字符串中插入空格

时间:2014-08-21 15:13:17

标签: unix sed

需要插入空格以分隔第8列的日期和时间。

输入文件:

AAA|detail_hist|count|||766855||2014-08-2019:49:57
BBB|detail_hist|count|||766855||2014-07-2019:49:57

必需的输出:

AAA|detail_hist|count|||766855||2014-08-20 19:49:57
BBB|detail_hist|count|||766855||2014-07-20 19:49:57

4 个答案:

答案 0 :(得分:3)

您可以使用:

$ sed -r 's/[0-9]{4}-[0-9]{2}-[0-9]{2}/& /' file
AAA|detail_hist|count|||766855||2014-08-20 19:49:57
BBB|detail_hist|count|||766855||2014-07-20 19:49:57

它会查找XXXX-YY-ZZ的块并将其替换为XXXX-YY-ZZ(即块+空格)。

如果不支持-r,则需要转义每个{}

sed 's/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}/& /' file

答案 1 :(得分:2)

通过sed,

$ sed 's/^\(.*\)\([0-9][0-9]:.*:.*\)$/\1 \2/g' file
AAA|detail_hist|count|||766855||2014-08-20 19:49:57
BBB|detail_hist|count|||766855||2014-07-20 19:49:57

答案 2 :(得分:2)

我知道您要求使用sed解决方案但是当您谈论修改特定字段编号时,您应该考虑使用awk,因为它内置了对编号字段的支持:

$ awk 'BEGIN{FS=OFS="|"} {sub(/.{10}/,"& ",$8)} 1' file
AAA|detail_hist|count|||766855||2014-08-20 19:49:57
BBB|detail_hist|count|||766855||2014-07-20 19:49:57

答案 3 :(得分:0)

如果结构与样品一样(第8列后面没有任何内容)

sed 's/.\{8\}$/ &/' YourFile

具有空间安全性

sed 's/.\{8\} *$/ &/' YourFile

--posix与gnu sed