如何从sql文件替换KSH文件中的字符串



这是我在ksh文件中的代码

current_year=$(date +%Y)
current_month=$(date +%m)
sql=$(cat $script_path | sed -i 's/&1/current_year/g' | sed -i 's/&2/current_month/g')

Fisrt,我在KSH文件中cat一个sql文件,然后我想用current_yearcurrent_month替换sql文件中名为"&1""&2"的字符串。但它不起作用,希望我能在这里找到解决方案,非常感谢。

我这样做的原因是我不想将参数从ksh文件传递到sql文件,我只想用一种简单的方法来替换ksh文件中的字符串。

我将您的脚本更改为:

script_path=script.txt
current_year=$(date +%Y)
current_month=$(date +%m)
sql=$(sed -e "s/&1/${current_year}/g" 
-e "s/&2/${current_month}/g" "${script_path}")
echo "${sql}"
  • 您不需要cat,我将其作为sed的stdin读取(< ${script_path}(
  • 搜索并替换sed-e,而不是用于内联编辑的-i
  • 使用双引号,而不是单引号。这允许变量替换
  • 逃离&,通过执行&使其不被解释

这是一个示例输入文件和结果:

# cat script.txt; ksh sq.sh
select * from &1 where &2;
select script.txt sq.sh from 2022 where 09;

最新更新