我想在bash中使用for循环的索引来计算一个数字,然后将该数字传递给sed:
for i in {1989..2009..1}
do
let year=i-1
echo $year
find /cygdrive/d/snowmodel/$i/snowmodel.par -type f -exec \
sed -i 's/iyear_init = 1989/iyear_init = '$year'/g' {} +
done
所以我想用行iyear_init = 1989
替换行iyear_init = (the value of i-1, which should be the variable "year")
。
echo $year
命令返回正确的值,但似乎当它传递给sed时,它会恢复为像字符串一样处理年份。
感谢您的帮助。
答案 0 :(得分:1)
在stackoverflow建议后找到答案相关问题(我猜我的搜索查询措辞不是很好)。
问题是我需要用双引号替换单引号,因为单引号内的变量不会在sed中被替换。以下工作:
for i in {1989..2009..1}
do
let year=i-1
echo $year
find /cygdrive/d/snowmodel_cig/cig_79/bias_runs/$i/snowmodel.par -type f -exec \
sed -i "s/iyear_init = i-1/iyear_init = $year/g" {} +
done