需要帮助来执行 sed 命令以用变量替换字符串

需要帮助来执行 sed 命令以用变量替换字符串

我有一个数据/时间格式的变量,我想用用户输入变量的文件中以下字符串的第一个参数替换它

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///

正如所评论的,彻底验证变量的内容以防止出现小鲍比桌

相关内容