变量在 sed 命令中不起作用

Jeg*_*a B 0 shell sed

如何使用变量代替3下面的命令?

sed -i '3s/$/ newvalue/' filename
Run Code Online (Sandbox Code Playgroud)

我试过

var=1
sed -i '$vars/$/ newvalue/' filename
sed -i "$vars/$/ newvalue/" filename
Run Code Online (Sandbox Code Playgroud)

ran*_*mir 5

首先,您需要使用双引号来允许 shell 参数/变量扩展。然后,如果变量后面的文本可以解释为变量名称 ( ) 的一部分,则需要使用大括号来隔离变量名称before${var}after。最后,要$在双引号下使用文字,您应该使用黑斜杠对其进行转义。全部一起:

var=3
sed -i "${var}s/\$/ newvalue/" filename
Run Code Online (Sandbox Code Playgroud)

一种替代方法是交替使用双引号和单引号(在这种情况下,不会对任何字符进行特殊处理,包括$参数扩展):

sed -i "$var"'s/$/ newvalue/' filename
Run Code Online (Sandbox Code Playgroud)