Shell脚本,搜索和替换变量

时间:2014-12-19 19:17:00

标签: shell awk sed

我有一个小的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有另一种方式吗? 提前谢谢。

3 个答案:

答案 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"