我有一些变数:
$begin=10
$end=20
如何将它们传递给sed
命令。
sed -n '$begin,$endp' filename | grep word
sed -n '10,20p' filename | grep word
答案 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 /;"
,则可能会发生令人不快的事情。