2

我知道

回显文本>>文件.txt

我可以将“文本”附加到文件 file.txt 的末尾

但是是否可以在文件开头插入一些内容而不删除现有内容?

谢谢,

4

3 回答 3

4

您可以使用 cat 和临时文件:

echo 'text' | cat - file.txt > temp && mv temp file.txt

于 2013-10-30T18:34:46.073 回答
4

您可以使用ed标准编辑器:

stuff="this is the stuff you want to prepend to file"
ed -s file.txt < <(printf '%s\n' 1 i "$stuff" . wq) > /dev/null

如果要添加几行,请将它们放在一个数组中,如下所示:

stuffs=( "this is the first line you want to prepend to file" "lalala the second line" "my gorilla loves bananas in this third line" )
ed -s file.txt < <(printf '%s\n' 1 i "${stuffs[@]}" . wq) > /dev/null

唯一的限制是插入仅包含单个句点的行。叹。

ed是标准编辑器。此方法不涉及临时文件!如果您选择此方法,您将真正编辑文件(因此您不会更改权限和所有权)。这可能是最有效的方法之一。一种更有效的方法(用于 huuuuge 文件)是直接处理dd. 但你肯定不希望在这里。

正如 Georgi Kirilov 在下面的评论中所建议的那样,您可以使用此方法而无需任何 bashism,如下所示:

stuffs=( "I love oranges, but my gorilla loves bananas" )
printf '%s\n' 1 i "$stuff" . wq | ed -s file.txt > /dev/null

前提是您的系统带有printf(并且非常非常有可能)。

于 2013-10-30T18:36:28.770 回答
3

是的,你可以通过 sed 做到这一点:

sed -i '' '1i\
some-text
' file

或使用 awk:

awk -v T=some-text 'NR==1{print T} 1' file

没有任何外部实用程序:

echo -e "some-text\n$(<file)" > file
于 2013-10-30T18:32:37.640 回答