使用Bash麻烦在日志文件的名称中交换日期戳

时间:2018-07-17 14:23:48

标签: bash ubuntu sed

我正在尝试使用bash脚本在日志文件的名称中交换日期。我似乎无法约会得很好。

当我尝试使用sed交换日期时,原始日期仍在文件名中(我现在正在回显而不是使用mv):

#!/bin/bash
DATE=`date +%Y-%m-%d`
YESTERDATE= date -d 'yesterday 13:00' '+%Y-%m-%d'
echo "$DATE"
echo "$YESTERDATE"
for LOGFILE in *.$DATE;
do
    newfile="$(echo ${LOGFILE} |sed -e 's/$DATE/$YESTERDATE/')" ;
    echo "$newfile"
    #mv -- "$LOGFILE" "$newfile";
done

我要更改的日志文件只是其中有今天日期的文件。格式为log_file.log.2018-07-17。我希望将其更改为log_file.log.2018-07-16

我在sed命令中使用变量名的方式是否存在问题?

3 个答案:

答案 0 :(得分:1)

您在报价时遇到问题。这行

newfile="$(echo ${LOGFILE} |sed -e 's/$DATE/$YESTERDATE/')"

对sed使用单引号-并且单引号防止变量被替换。如果您尝试类似

的简单操作,就会看到问题
echo "$(echo '$foo')"

相反,尝试

newfile=$(echo ${LOGFILE} |sed -e "s/$DATE/$YESTERDATE/")

答案 1 :(得分:0)

一方面是"",另一方面是不好的YESTERDATE,尝试回显它。对于我来说,是这样的:

#!/bin/bash
DATE=`date +%Y-%m-%d`
#change No.1
YESTERDATE=$(date -d 'yesterday 13:00' '+%Y-%m-%d')
echo "$DATE"
echo "$YESTERDATE"
for LOGFILE in *.$DATE;
do
    #change No.2
    newfile="$(echo ${LOGFILE} |sed -e "s/$DATE/$YESTERDATE/")" ;
    echo "$newfile"
    #mv -- "$LOGFILE" "$newfile";
done

答案 2 :(得分:0)

您好,在脚本的下面一行修改:-

 newfile=$(echo ${LOGFILE} | sed -e 's/'$DATE'/'$YESTERDATE'/')

sed中,字符串变量应在单引号'