sed 在最后一行之前插入变量

sed 在最后一行之前插入变量

我想在最后一行之前插入一个变量。

这是我的文件。

$ cat file.txt
one
two
three
four
five

当我尝试不使用变量时,它运行良好。

$ sed -i '$i name' file.txt
$ cat file.txt
one
two
three
four
name
five

当我使用变量时,它不起作用。我尝试了双引号和反斜杠的不同组合。

$ NAME=name
$ sed -i '$i "$NAME"' file.txt
$ cat file.txt
one
two
three
four
"$NAME"
five

答案1

在 中bash,单引号用于固定的文字字符串。双引号用于需要进行变量插值、命令替换等操作的地方。

您的sed命令需要使用文字$(以便i命令适用于文件的最后一行) $NAME变量进行插值。为此,您需要使用$反斜杠“转义”文字,以便 shell 不会将$ised 脚本中的 解释为“用变量 $i 的内容替换”而不是“文字$后跟文字i”:

顺便说一句,最好在不使用该-i选项的情况下测试此类内容,这样sed在您确定正确的语法时就不会弄乱您的输入文件。-i当您确定它确实按照您的要求执行时,再添加后者。

$ NAME=name
$ sed "\$i $NAME" file.list 
one
two
three
four
name
five

答案2

其他方式:

$ NAME=name
$ sed '$i '"$NAME" file.list
one
two
three
four
name
five

相关内容