在bash脚本中,是否可以将某些内容回显到文件的开头?

时间:2013-10-30 18:30:40

标签: bash file shell echo

我知道

echo text>> file.txt的

我可以将“text”附加到文件file.txt

的末尾

但是可以在不删除现有内容的情况下在文件的开头插入内容吗?

谢谢,

3 个答案:

答案 0 :(得分:3)

您可以使用标准编辑器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在下面的评论中建议的那样,你可以使用这种方法而不需要任何基本原理:

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

如果您的系统附带printf(非常非常可能)。

答案 1 :(得分:2)

是的,你可以通过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

答案 2 :(得分:2)

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

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