我有一个小的sql文件,它有一个占位符模式的日期。例如文件t.sql
select count(*) from tablename where date >= STARTDATE
我想将上面的STARTDATE替换为shell脚本中的当前日期。例如我所拥有的是以下
DATE=`date +%Y%m%d`
sed -e "s/STARTDATE/\$DATE/g" t.sql
但是,这只是用$ DATE替换STARTDATE。如何强制sed
使用此变量的值?或者说Perl有另一种方式吗?
提前谢谢。
答案 0 :(得分:2)
您无需逃避sed中的$
sed -e "s/STARTDATE/$DATE/g" t.sql
<强>测试强>
$ echo "select count(*) from tablename where date >= STARTDATE" | sed -e "s/STARTDATE/$DATE/g"
select count(*) from tablename where date >= 20141220
答案 1 :(得分:2)
我知道你在shell中要求如何做到这一点,我看到你已经收到了几个很好的答案,但更好的整体设计是在本机SQL中进行查询。几乎每个主要供应商都提供了一种基于今天的日期进行查询的机制。例如,在MySQL中
SELECT COUNT(*) FROM tablename WHERE DATE(date) >= DATE(NOW())
答案 2 :(得分:1)
不要逃避dollor($)。
sed -e "s/STARTDATE/$DATE/g" t.sql
否则你可以在替换中使用回声。
sed -e "s/STARTDATE/`echo $DATE`/g"