我想在最后一行之前插入一个变量。
这是我的文件。
$ 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 不会将$i
sed 脚本中的 解释为“用变量 $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