Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在shell脚本中更改文件中的日期格式?_Shell_Date_For Loop_Sed_Grep - Fatal编程技术网

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

如何在shell脚本中更改文件中的日期格式?,shell,date,for-loop,sed,grep,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

我有一个文件,其中写入的日期格式为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
#/bin/bash
NR=$(类别$1 | grep-o'[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-“| cut-d'-'-f1,1 | wc-l)

对于((i=1;i您不需要为字符串的某些部分使用变量。如果您使用
\(…\)
分组,Sed已经记住了匹配的某些部分

不能同时将
/
用作文字和替换分隔符。请将文字斜杠反斜杠,或使用其他分隔符:

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


但我不能逃过斜杠吗?@DenisNichita:可以,但我发现它可读性较差。检查更新。我如何逃过斜杠?@DenisNichita:对我有效。你使用的是什么操作系统,什么版本的sed?
sed 's=\([0-9]\{4\}\)-\([0-9][0-9]\)-\([0-9][0-9]\)=\3/\2/\1=g'