繁体   English   中英

Shell脚本,搜索并替换为变量

[英]Shell scripting, search and replace by a variable

我有一个小型sql文件,其中包含日期的占位符模式。 例如文件t.sql

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还有另一种方式? 提前致谢。

您无需在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

我知道您在问如何在Shell中执行此操作,并且看到您已经收到了几个很好的答案,但是更好的总体设计是使用本机SQL进行查询。 几乎每个主要供应商都提供了一种根据今天的日期进行查询的机制。 例如,在MySQL中

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

不要逃脱美元。

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

否则,您可以在替换内使用回声。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM