Bash数学然后将输出传递给sed

时间:2013-10-11 01:19:22

标签: bash sed

我想在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时,它会恢复为像字符串一样处理年份。

感谢您的帮助。

1 个答案:

答案 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
相关问题