shell 问题

#!/bin/sh
begin=`date -d '-5 minute' '+ %Y/%m/%d %H:%M'`
end=`date '+ %Y/%m/%d %H:%M'`
logfile=nohup.log
log=`sed -n "/$begin/,/$end/p" $logfile`
if [ "$log" = "" ]; then
        echo 1
else
        echo $log
fi

运行结果

[root@i-612-35703-VM ~]# ./f
sed: -e expression #1, char 8: unknown command: `0'
1

这哪错了
第一行单独运行没问题啊

阅读 3.7k
3 个回答

sh -x f 帖结果

估计是因为 $begin $end 字符里有 "/"
需要转义吧

#!/bin/sh
begin=`date -d '-5 minute' '+ %Y/%m/%d %H:%M'`
end=`date '+ %Y/%m/%d %H:%M'`
begin=${begin//\//\\\/}
end=${end//\//\\\/}
logfile=nohup.log
log=`sed -n "/$begin/,/$end/p" $logfile`
if [ "$log" = "" ]; then
        echo 1
else
        echo $log
fi

试试这个!你输出的日期字符串里含有 /,而/是sed的模式匹配符。
我加 \ 转义过了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进