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

时间:2015-05-28 09:22:12

标签: shell sed freebsd

我有一些变数:

$begin=10
$end=20

如何将它们传递给sed命令。

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

1 个答案:

答案 0 :(得分:2)

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

awk -v begin="$begin" -v end="$end" 'NR == begin, NR == end' filename

如果使用双引号(其中扩展了shell变量),则使用sed 可能

sed -n "$begin,$end p" filename

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