如何在shell脚本中更改文件中的日期格式?

时间:2016-12-23 13:19:15

标签: shell date for-loop sed grep

我有一个文件,其中的日期格式为YYYY-MM-DD。我想编写一个shell脚本来将日期格式更改为DD / MM / YYYY。 这是我第一次尝试不起作用

#!/bin/bash
NR=$(cat $1 | grep -o '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' | cut -d'-' -f 1,1 | wc -l)
for (( i=1; i<=$NR; ++i))
do
    Y=$(cat $1 | grep -o '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' | cut -d'-' -f 1,1 | head -1)
    M=$(cat $1 | grep -o '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' | cut -d'-' -f 2,2 | head -1)
    D=$(cat $1 | grep -o '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' | cut -d'-' -f 3,3 | head -1)
sed 's/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]/"$D/$M/$Y"/' $1
done

我收到以下错误&#34; sed:-e表达式#1,字符51:对s&#39;&#39;&#34;

的未知选项

1 个答案:

答案 0 :(得分:0)

您不需要为部分字符串添加变量。如果您使用\(...\)分组,则Sed已记住部分匹配。

您不能同时使用/作为文字和替换分隔符。要么反斜杠文字斜杠,要么使用不同的分隔符:

sed 's/\([0-9]\{4\}\)-\([0-9][0-9]\)-\([0-9][0-9]\)/\3\/\2\/\1/g'

sed 's=\([0-9]\{4\}\)-\([0-9][0-9]\)-\([0-9][0-9]\)=\3/\2/\1=g'