0

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

4

3 回答 3

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
于 2012-04-18T20:17:07.203 回答
1
sed 's|^\([0-9]\+\)/\([0-9]\+\)/\([0-9]\+\)|\3-\2-\1|'

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

于 2012-04-18T20:20:46.093 回答
0

这可能对您有用:

sed 's/^\(..\).\(..\).\(....\)/\3-\2-\1/' file
于 2012-04-18T22:17:36.027 回答