在sed中传递变量时出错

时间:2013-04-18 09:38:06

标签: unix sed

我的剧本:

while read start_val
do
end_value = "$start_val+10" | bc

sed -n '"$start_value","$end_value"d'  <file>
done < in_file

实际上我想通过一些计算使用从输入文件中获取的数据来打印文件的行。

4 个答案:

答案 0 :(得分:1)

这是因为变量不会在单引号(')内扩展。试试例子

echo '$HOME'

vs

echo "$HOME"

在sed之后使用单引号的例子也是如此。

答案 1 :(得分:1)

您可以像以下一样使用它:

sed -n "$start_value,$end_value"'d' $file

顺便说一下,不需要在那里使用bc:

while read start_val
do
    end_value=$((start_val+10))
    sed "$start_value,$end_value"'d' $file
    # not sure what above sed is doing since you're not storing output anywhere!
done < in_file

答案 2 :(得分:1)

sed是单行上简单替换的优秀工具,对于任何其他文本操作,只需使用awk:

awk '
NR==FNR { in_file[FNR] = $0; next }
{ for (i=$0; i<=$0+10; i++) print in_file[i] }
' in_file file

不是你的原始脚本使用-n来告诉sed不打印任何行然后d告诉sed删除一些行所以它不会产生任何输出所以我不确定你真正想要做什么,awk脚本是猜测。

答案 3 :(得分:0)

sed -n $start_value','$end_value'p' file

这将打印从$ start_value到$ end_value的所有行。