将 sed 与整数变量一起使用

将 sed 与整数变量一起使用

我想使用变量 sed。

例如,sed -n '1,10p' file。因此,10我想使用$kk 为整数的位置,而不是 。

答案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

您还可以通过在变量$kp.这是有效的,因为 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变量和环境变量的用法有什么区别?

参考

相关内容