2014-12-19 163 views
0

我有一個小的SQL文件,其中有一個佔位符模式的日期。例如,一個文件t.sqlShell腳本,搜索和替換變量

select count(*) from tablename where date >= STARTDATE 

我想替換上面從shell腳本當前日期STARTDATE。例如,我擁有以下內容

DATE=`date +%Y%m%d` 
sed -e "s/STARTDATE/\$DATE/g" t.sql 

但是,這只是用$ DATE替換STARTDATE。我如何強制sed使用此變量的值?或者有另一種說Perl的方法嗎? 在此先感謝。

+5

只需刪除\ – OmnipotentEntity

回答

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 
+0

S /需求/要/ ... –

2

我承認你是詢問如何做到這一點的殼牌,我看你已經收到了幾個優秀的答案,但更好的總體設計是在原生SQL中進行查詢。幾乎每個主要供應商都提供基於當前日期查詢的機制。例如,在MySQL中

SELECT COUNT(*) FROM tablename WHERE DATE(date) >= DATE(NOW()) 
+0

還可以防止任何可能的SQL注入 –

1

不要逃脫dollor($)。

sed -e "s/STARTDATE/$DATE/g" t.sql 

否則你可以使用替換內的回聲。

sed -e "s/STARTDATE/`echo $DATE`/g"