我有一个具有内置代码处理器并支持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”的未知选项
关于, 安奇
答案 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'#"
作为分隔符,您可以选择任何所需的内容。当您选择/
以外的其他内容时,当您在替换字符串中使用它时,不必一直逃避它。