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