这是我在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_year
和current_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;