我在 Amazon Linux 上使用 bash shell。我正在尝试在文件顶部插入一行,所以我有
header_line="first_line_of_file"
...
sed -i "1 i\$header_line" /tmp/$file_title
然而,实际出现在我的文件顶部的是
$header_line
如何告诉 sed 不要按字面解释我的变量,而是使用变量中的值插入到文件顶部?
答案1
如果您使用 GNU 或busybox
, sed
,那么您应该能够这样做
sed -i "1i $header_line" "/tmp/$file_title"
您遇到的问题是由于$
从 shell 中转义,因此它无法识别$header_line
为变量。
使用 NetBSD 或 OpenBSD sed
(也适用于 FreeBSD 和 macOS,但需要在-i
和之间有一个空格''
):
sed -i'' "1i\\
$header_line
" "/tmp/$file_title"
BSDsed
与传统sed
实现一样,并且按照 POSIX 的规定,在命令\
后需要一个和一个文字换行符i
,并且由于我们使用双引号,因此需要\
从 shell 中转义。
另一种选择是使用cat
:
printf '%s\n' "$header_line" | cat - "/tmp/$file_title" >new_file && mv new_file "/tmp/$file_title"
$header_line
这也绕过了Stéphane Chazelas 在下面的评论中提到的值中的反斜杠问题。