【问题标题】:How to parse variable to sed command in shell?如何在shell中将变量解析为sed命令?
【发布时间】:2015-08-10 17:07:03
【问题描述】:

我有一些变量:

$begin=10
$end=20

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

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

【问题讨论】:

标签: shell sed freebsd


【解决方案1】:

这不起作用的原因是 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 /;",则可能会发生不愉快的事情。

【讨论】:

    猜你喜欢
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 2017-11-09
    • 2017-03-08
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多