如何在Shell中使用sed仅在.csv文件的第一列中更改日期格式

时间:2018-08-01 21:52:36

标签: csv unix sed

您好,我尝试仅在.csv文件的第一列中更改日期格式 来自:

  

2015-03-31 | base | 2015-03-31 | 100 | 0 | 3.225 | 3.225 | 0 | 0 | 0 | 2015-03-31
  2015-03-31 | base | 2015-03-31 | 100 | 0 | 3.225 | 3.225 | 0 | 0 | 0 | 2015-03-31
  2015-03-31 | base | 2015-03-31 | 100 | 0 | 3.225 | 3.225 | 0 | 0 | 0 | 2015-03-31
  2015-03-31 | base | 2015-03-31 | 100 | 0 | 3.225 | 3.225 | 0 | 0 | 0 | 2015-03-31
  2015-03-31 | base | 2015-03-31 | 100 | 0 | 3.475 | 3.475 | 0 | 0 | 0 | 2015-03-31
  2015-03-31 | base | 2015-03-31 | 100 | 0 | 3.475 | 3.475 | 0 | 0 | 0 | 2015-03-31
  2015-03-31 | base | 2015-03-31 | 100 | 0 | 3.475 | 3.475 | 0 | 0 | 0 | 2015-03-31
  2015-03-31 | base | 2015-03-31 | 100 | 0 | 3.475 | 3.475 | 0 | 0 | 0 | 2015-03-31
  2015-03-31 | base | 2015-03-31 | 100 | 0 | 3.475 | 3.475 | 0 | 0 | 0 | 2015-03-31

收件人:

  

03/31/2015 | base | 2015-03-31 | 100 | 0 | 3.225 | 3.225 | 0 | 0 | 0 | 2015-03-31
  2015/03/31 | base | 2015-03-31 | 100 | 0 | 3.225 | 3.225 | 0 | 0 | 0 | 2015-03-31
  2015/03/31 | base | 2015-03-31 | 100 | 0 | 3.225 | 3.225 | 0 | 0 | 0 | 2015-03-31
  2015/03/31 | base | 2015-03-31 | 100 | 0 | 3.225 | 3.225 | 0 | 0 | 0 | 2015-03-31
  2015/03/31 | base | 2015-03-31 | 100 | 0 | 3.475 | 3.475 | 0 | 0 | 0 | 2015-03-31
  2015/03/31 | base | 2015-03-31 | 100 | 0 | 3.475 | 3.475 | 0 | 0 | 0 | 2015-03-31
  2015/03/31 | base | 2015-03-31 | 100 | 0 | 3.475 | 3.475 | 0 | 0 | 0 | 2015-03-31
  2015/03/31 | base | 2015-03-31 | 100 | 0 | 3.475 | 3.475 | 0 | 0 | 0 | 2015-03-31
  03/31/2015 | base | 2015-03-31 | 100 | 0 | 3.475 | 3.475 | 0 | 0 | 0 | 2015-03-31

我尝试使用sed:

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

sed -re 's/^([0-9][0-9])\-([0-9][0-9])\-[0-9][0-9][0-9][0-9](.*)$/\2\/\1\/\3\4/'

但是它抛出一个错误。

1 个答案:

答案 0 :(得分:0)

您的两次尝试都非常接近。命令:

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

应该工作。可以通过用.替换每个点[0-9]并添加首字母^来实现防弹。

删除11个反斜杠中的8个的变体是:

  sed -r 's_(....)-(..)-(..)_\2/\3/\1_'

下划线_可以用其他字符代替。