2011-02-17 03:21:12 +0000 2011-02-17 03:21:12 +0000
306
306

如何在Bash中添加文本到文件的开头?

你好,我想在一个文件中添加文本。例如,我想把任务添加到todo.txt文件的开头。我知道有echo 'task goes here' >> todo.txt,但这是在文件的末尾添加文本(不是我想要的)。

答案 (9)

396
396
396
2011-02-17 03:34:10 +0000
echo 'task goes here' | cat - todo.txt > temp && mv temp todo.txt

sed -i '1s/^/task goes here\n/' todo.txt

sed -i '1itask goes here' todo.txt &001

81
81
81
2012-12-19 18:57:40 +0000

在我看来,一个更简单的方法是:

echo -e "task goes here\n$(cat todo.txt)" > todo.txt

这样做是因为在$(...)里面的命令被todo.txt

覆盖之前,> todo.txt里面的命令会被执行。另一个更简单的方法是…..

echo "task goes here
$(cat todo.txt)" > todo.txt

…简单的说就是使用换行。当然,这已经不是单行字了,但实际上它以前也不是单行字。如果你在脚本中执行,并且担心缩进的问题(例如,你在函数中执行),有一些变通的方法可以使它仍然很好地适应,包括但不限于:

(echo 'task goes here' && cat todo.txt) > todo.txt
echo 'task goes here'$'\n'"$(cat todo.txt)" > todo.txt

还有,如果你关心todo.txt的末尾是否有新的行,就不要使用这些。好吧,除了第二个到最后一个。这样就不会乱了结尾了。

28
28
28
2013-04-22 12:47:19 +0000

moreutils ](http://joeyh.name/code/moreutils/)有一个不错的工具叫`sponge`:

echo "task goes here" | cat - todo.txt | sponge todo.txt

&001

它可以 “浸泡 "STDIN,然后写入文件,这意味着你不用担心临时文件和移动文件。

你可以通过moreutils在很多Linux发行版上得到apt-get install moreutils,通过brew install moreutils,或者在OS X上使用Homebrew,用&007。

12
12
12
2016-04-11 00:23:56 +0000

你可以在Ex模式下使用Vim:

ex -s -c '1i|task goes here' -c x todo.txt

1.1选择第一行

2.i插入

3.x保存并关闭

5
5
5
2011-02-17 03:26:24 +0000

你可以创建一个新的、临时文件。

echo "new task" > new_todo.txt
cat todo.txt >> new_todo.txt
rm todo.txt
mv new_todo.txt todo.txt

你也可以用sedawk。但基本上是一样的。

3
3
3
2011-02-17 06:25:01 +0000

你不能在文件的开头插入内容。你唯一能做的就是替换现有的内容或者在文件的末尾添加字节。

任何解决你的问题的方法都需要创建一个临时文件(或缓冲区),这将最终覆盖原来的文件。

3
3
3
2013-01-09 22:49:33 +0000

如果文本文件小到可以装入内存,就不用创建一个临时文件来替换。你可以把它全部加载到内存中,然后把它写回文件中。

echo "$(echo 'task goes here' | cat - todo.txt)" > todo.txt

&001

不可能在不把整个文件写过头的情况下,在文件的开头添加行,这样做是不可能的。

1
1
1
2014-07-08 14:16:36 +0000

您可以使用tee:

echo 'task goes here' | cat - todo.txt | tee todo.txt
0
0
0
2018-08-04 07:04:48 +0000

GitBash* +Windows10 +多行 :

这里有一个可以让你使用多行字符串的版本。