我正在尝试使用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
命令中使用变量名的方式是否存在问题?
答案 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
中,字符串变量应在单引号'