如何在shell中将变量解析为sed命令?

如何在shell中将变量解析为sed命令?,shell,sed,freebsd,Shell,Sed,Freebsd,我有一些变量: $begin=10 $end=20 如何将它们传递到sed命令 sed -n '$begin,$endp' filename | grep word sed -n '10,20p' filename | grep word 这不起作用的原因是shell代码中的单引号阻止了变量扩展。好方法是使用awk: awk -v begin="$begin" -v end="$end" 'NR == begin, NR == end' filename 如果使用双引号(shell变量在其

我有一些变量:

$begin=10
$end=20
如何将它们传递到
sed
命令

sed -n '$begin,$endp' filename | grep word
sed -n '10,20p' filename | grep word

这不起作用的原因是shell代码中的单引号阻止了变量扩展。好方法是使用awk:

awk -v begin="$begin" -v end="$end" 'NR == begin, NR == end' filename
如果使用双引号(shell变量在其中展开),则可以使用sed:


但是,这会受到代码注入漏洞的影响,因为sed无法以这种方式区分代码和数据(与上面的awk代码不同)。如果用户设法设置,例如,
end=“20 e rm-Rf/;”
,则可能会发生不愉快的事情。

您可以在sed中放置grepping逻辑:try
sed-n“$begin,$end{/word/p}”文件
可能重复的
sed -n "$begin,$end p" filename