如何使用 sed 在文件顶部插入一行?

如何使用 sed 在文件顶部插入一行?

我在 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 在下面的评论中提到的值中的反斜杠问题。

相关内容