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