我想使用变量 sed。
例如,sed -n '1,10p' file
。因此,10
我想使用$k
k 为整数的位置,而不是 。
答案1
背景
sed
无法扩展 shell 或环境变量。相反,您必须选择允许 shell、Bash 进行扩展的引号。当它们用双引号括起来时,Bash 将扩展其中的变量,但当它们用单引号括起来时则不会。要使用单引号,您需要执行以下操作:
$ sed -n '1,'$k'p' file
注意:在上面,我们公开了变量,$k
因此它不在传递给 的参数的任何引号内sed
。通过这样做,shell Bash 将扩展$k
到它设置的任何值。
如果使用双引号,则可以使用符号${var}
来保护双引号内的变量,以便 shell 扩展它。下面的${k}
符号是必需的,因为否则变量名称后面$k
将跟着 ,从而p
导致 Bash shell 认为变量的名称是$kp
。
$ sed -n "1,${k}p" file
您还可以通过在变量$k
和p
.这是有效的,因为 sed 语法允许地址和命令之间有空格(换句话说,空格以这种形式传递给 sed,与 不同${k}
)。
$ sed -n "1,$k p" file
笔记:您需要谨慎使用这些方法,因为如果$k
未设置它们将会失败:
$ printf "blah %d\n" $(seq 10) | sed -n '1,'$k'p'
sed: -e expression #1, char 3: unexpected `,'
例子
以下是双引号${k}
变体的示例:
$ k="3"; printf "blah %d\n" $(seq 10) | sed -n "1,${k}p"
blah 1
blah 2
blah 3
shell 与环境变量
有关此主题的更多信息,我强烈建议您阅读此 U&L 问答,标题为:shell变量和环境变量的用法有什么区别?。