sed日期格式问题

sed日期格式问题

我有一个 sed 命令,一直用来格式化数据集中的日期。我遇到了一个问题,我确信这只是我对语法缺乏理解,但想知道是否有人可以帮助澄清发生了什么。

输入:

26,082619,1300,1,2,0
26,082619,1400,332,8,190
26,082619,1500,442,10,118
26,082619,1600,530,151,12
26,082619,1700,534,164,0
26,082619,1800,538,176,0

命令

sed -E "s/,(.{2})(.{2})(.{2}),/,\1\/\2\/20\3,/g" input.csv > output.csv

输出(注意第3行)

26,08/26/2019,1300,1,2,0
26,08/26/2019,1400,332,8,190
26,08/26/2019,1500,44/2,/2010,118
26,08/26/2019,1600,530,151,12
26,08/26/2019,1700,534,164,0
26,08/26/2019,1800,538,176,0

预期产出

26,08/26/2019,1300,1,2,0
26,08/26/2019,1400,332,8,190
26,08/26/2019,1500,442,10,118
26,08/26/2019,1600,530,151,12
26,08/26/2019,1700,534,164,0
26,08/26/2019,1800,538,176,0

答案1

这个问题有两个方面:

  1. 在面向行的上下文中,.匹配任何性格——包括,

  2. 您使用了该g标志,它告诉 sed 在一行中进行尽可能多的替换

因此它匹配以逗号为界的六个字符的所有非重叠序列。

对于您的示例数据,删除标志就足够了g,以便只替换第一个匹配的序列 - 但是您还应该考虑.用更具体的内容替换,例如[^,](逗号以外的任何字符)或[0-9](任何拉丁十进制数字)。

相关内容