使用sed复制时重新格式化日期列

时间:2012-04-18 19:50:35

标签: sed

我需要将.csv文件从一个目录复制到另一个目录,同时这样做需要重新格式化第一列,即日期列,从2012年4月13日到2012年4月13日。执行这种简单转换的sed语法是什么?我正在网上阅读的sed内容让我感到非常困惑。

3 个答案:

答案 0 :(得分:2)

到目前为止你尝试了什么?你可以从像这样小的东西开始作为测试用例:

echo "13/04/2012;Col2;Col3" | sed -E 's#^([^/]+)/([^/]+)/([0-9]+)(.*)#\3-\2-\1\4#'

s           = substitution command
#           = start of pattern
^           = start of line
([^/]+)/    = group of all non-/-characters followed by a / (day)
([^/]+)/    = group of all non-/-characters followed by a / (month)
([0-9]+)    = group of at least one digit (year)
(.*)        = rest of line
#           = start of replacement
\3          = backward reference to capture of third group (year)
\2          = backward reference to capture of second group (month)
\1          = backward reference to capture of first group (day)
\4          = backward reference to capture of fourth group (rest of line)
# end of command

答案 1 :(得分:1)

sed 's|^\([0-9]\+\)/\([0-9]\+\)/\([0-9]\+\)|\3-\2-\1|'

这从行的开头(^)开始,记录(\(...\))一个或多个(\+)个数字([0-9]),然后是斜杠(/),第二组后跟另一个斜杠和第三组,并重新排列由破折号分隔的记录集(\1,\2,\3)。

答案 2 :(得分:0)

这可能对您有用:

sed 's/^\(..\).\(..\).\(....\)/\3-\2-\1/' file