用固定日期字符串替换SQL字符串中的静态子字符串

时间:2018-08-31 13:01:48

标签: shell unix sed

我有一个具有内置代码处理器并支持shell脚本的软件。我在一个文件中有多个SQL字符串,这些字符串将通过该软件进行一对一处理,并确定某些子字符串的值该常量将被该软件覆盖,而不会更改包含原始SQL的原始文件。您可以在运行时将替换参数传递给该软件。

以下是其中一种SQL的示例sed:

echo " select * from TABLE where   DATE(TSP_DATE) between (CURRENT DATE -1 DAY) AND (CURRENT DATE)" | sed -e 's/CURRENT DATE - 1 DAY/'08/30/2018'/; s CURRENT DATE/'08/31/2018'/

我要替换子字符串

  

当前日期-1天

带有'08 / 30/2018'和

  

当前日期

使用一个命令显示“ 08/31/2018”。日期字符串包括引号。

运行上述脚本时,出现以下错误:

  

sed:-e表达式#1,字符29:“ s”的未知选项

关于, 安奇

1 个答案:

答案 0 :(得分:1)

不确定,如果要实施解决方案,那比必要的要复杂。

无论您使用什么DBMS,我都可以肯定它具有当前日期的功能。因此,您不必在Shell脚本中执行此操作。

例如,当您使用MySQL时,只需使用以下查询即可:

select * from TABLE where DATE(TSP_DATE) between CURDATE() - INTERVAL 1 DAY AND CURDATE();

无论如何,如果要使用sed进行操作,都可以这样做:

echo "select * from TABLE where   DATE(TSP_DATE) between (CURRENT DATE -1 DAY) AND (CURRENT DATE)" | sed "s#CURRENT DATE -1 DAY#'08/30/2018'#;s#CURRENT DATE#'08/31/2018'#"

作为分隔符,您可以选择任何所需的内容。当您选择/以外的其他内容时,当您在替换字符串中使用它时,不必一直逃避它。