我有一个数据/时间格式的变量,我想用用户输入变量的文件中以下字符串的第一个参数替换它
TO_DATE('07/13/2021 00:30:00' 'MM/DD/YYYY HH24:MI:SS')
我想'07/13/2021 00:30:00'
用我的变量替换。
我有一个脚本,它将接受用户输入的开始时间并将其存储在变量“st”中
我有一个静态查询的sql 文件。我需要帮助将 TO_DATE('07/13/2021 00:30:00' 替换为变量,然后脚本将执行。
尝试了下面的 sed 命令,但它不起作用
sed -e 的/(.TO_DATE()[^]( .*)/\1'$st'\2/' /apps/tmp/abc.sql
收到错误消息:“s”的未知选项 我是 sed 的新手。我是 sed 的新手
有人可以帮忙吗?
答案1
使用 sed,您将需要该s///
命令,但请注意替换文本包含斜杠。您可以为s
命令使用不同的分隔符:这里我将使用逗号:
sed -E "s,(TO_DATE\(')[^']+,\1${timestamp}," file.sql
演示:
$ cat file.sql
select * from table1
where created > TO_DATE('07/13/2021 00:30:00', 'MM/DD/YYYY HH24:MI:SS');
$ timestamp=$(date '+%m/%d/%Y %T')
$ sed -E "s,(TO_DATE\(')[^']+,\1${timestamp}," file.sql
select * from table1
where created > TO_DATE('07/14/2021 10:46:51', 'MM/DD/YYYY HH24:MI:SS');
这里的关键是在 sed 正文中使用双引号,以允许 shell 扩展变量,并为变量选择不同的分隔符s///
正如所评论的,彻底验证变量的内容以防止出现小鲍比桌